安卓小游戏开发五子棋
A. 安卓厉害的五子棋
其实在电脑出现之前,五子棋的玩家就发现黑棋采取某些开局赢面极大,实践中白棋几种很强的防守都无法阻挡黑棋最终赢,也怀疑有先手“绝对”必胜的方法。但这不能保证可能遗漏了某种白棋能赢的方式,所以二十世纪初五子棋的普遍的观点是黑棋应该是必胜,但近百年年都没有人能够真正“证明”出来白棋无论怎么下都是必败的——这个结论最终还是通过电脑来严格证明的。
其中1992年Victor Allis通过编程证明不带禁手的五子棋,黑必胜的,文章地址在这里:https://project.dke.maastrichtuniversity.nl/games/files/phd/SearchingForSolutions.pdf
——然后说说带禁手的五子棋——
禁手规则是只针对黑棋的,简而言之是黑棋只允许使用冲四活三这一种赢法(当然不排除白棋故意冲四不挡这种方法)。设计的目的也是为了限制黑棋的巨大优势,白棋也多了逼禁手这儿一种赢法。但后来人们也逐步发现带禁手后,黑棋依然似乎能不败。直到后来,也有人证明,带禁手执黑也可以必胜。
2001年Janos Wagner第一次证明的带禁手的五子棋,也是黑必胜的,文章地址在这里:http://www.sze.hu/~gtakacs/download/wagnervirag_2001.pdf
这个后面的证明比前面的证明要强很多,因为按照带禁手的走法,不带禁手也一定必胜,但倒过来未必。
黑棋的优势到底有多大呢?在26个职业开局里,已经发现有19个是黑棋必胜的(一打必胜)。
——然后说说五手两打——
这还不说,为了进一步削弱黑棋的优势,国际上推出五手两打(就是黑棋的第三步需要下两个点,但由白棋挑选让其下较弱的哪一个)的规则。可是人们发现黑棋带禁手依然是必胜。也就是说,黑棋必胜不仅仅有一种方法,而是至少有两种以上(来回应各种变种的第四步),像浦月、花月这种黑棋超级优势开局都有三种以上的必胜法。
从实践的角度来讲,网上是可以搜索“地毯谱”( 更新:目前花月、浦月、云月、雨月、峡月、溪月、金星、水月、寒星、明星、岚月、新月、名月,山月,残月都是五手两打必胜),一般在几百兆左右,可以用renlib软件打开,所谓地毯谱的意思就是黑棋会指定下法,但白棋每一步都可以选择棋盘任意位置,最后黑棋必胜。也就是说,只要按照此棋谱下棋,五子棋世界冠军都一定会输给你。
B. 怎样玩五子棋
1,最基本的是无论横着、竖着、左斜或者右斜,只要谁先组成连着的五子(五子连珠)谁就赢了。
2,一般刚开始玩都喜欢对方走了连着的三子才开始堵,但是高手比赛或者与高手过招的时候,推荐在对方刚组成活二子(两边都没有敌方棋子的连二子)就要去堵。
3,不要给对方组成活四子的可能,否则必输无疑。
4,在将对方的棋子隔散开来的同时,要保证自己棋子的密集度,并且有两个方向的开放性。(如果被对手堵在一个圈里,那就不好赢了。)
5,单独组成活四子非常难,不如同时组成两个活三子,两个半四子,一个活三一个半四。这样子对方无论堵你哪个,你都可以利用另一个获胜。
6,在落子的时候,要先考虑对方是否要同时组成好几个连子,尤其是其中包括活三或者半四的。如果没有,才能设计自己进攻的套路。当然在自己有足够把握先对手组成五子的时候,可以先考虑自己的进攻套路,然后再思考对方的目的和走势。
7,正规比赛中有国际规则,比如三三禁手(禁止黑子同时组成两个活三子),六连(黑子有六个连子就输了。比赛中经常会出现白子方利用白棋走势设计迫使黑子六连而获胜),等等。
8,无论正规或者业余,基本上都是黑子先走(叫黑子先手)。玩玩的话倒没那么多顾忌。
另:
1,网上有很多五子棋教学视频,如果真的喜欢五子棋可以研究一下,有一些“必胜套路”,学了可以偶尔冒充一下高手。
2,腾讯有一款什么什么版(好玩版?娱乐版?)的手机五子棋(支持安卓),是人机和人竞的集合软件,可以选择人机模式,也可以选择和QQ玩家对战的模式,甚至可以开个房间去单挑菜鸟(自己把房间号发过去让他进来即可),没信心玩家对战,可以先练习一下人机。人机里偶尔会有套路bug(你只要怎样怎样走,就可以赢),但是大多数套路都是很优秀、会变通的,可以说这款五子棋是我玩过的最好的了,可以堪比象棋领域的象棋小巫师了,不,说不定更好。
C. 请问我要用Android studio做一个五子棋的小游戏怎么配置开发环境
第一步,不考虑AI的情况下,先简单实现单人点击落子,点一次换一次黑白,落一次子判断一次输赢。第二步,加入socket通信两个人互落子。实现开局,落子,判断输赢,悔棋,认输,重新开局基本操作。第三步,加入AI,人机对战。
D. Android 五子棋小游戏 onDraw画棋盘 棋子画在棋盘线的下面
你把棋盘线的层级设低一点.
E. 比如制作五子棋的app怎么制作,需要学些什么
首先你有编程基础是再好不过的了。
手机游戏开发的平台是JME,一般不会用到C++。当然学过C++的更好。
你学的可能是JEE,所以你一定要把JME好好学一下,重点是MIDlet,CANVAS,RecordStore。此外MIDP1.0和2.0的特性要搞清楚,如果做和网络有关的还要学习MIDP网络编程。掌握这些就基本上门什么问题了,学的不多,对于一个会C++/JEE的人来说,应该可以在1个月左右学完。
和其他语言一样,JME关键是要多练,自己试着开发几个小游戏出来是不错的练习办法,可以找出你学习上的不足点。有条件的话,做出来的游戏应该拿到真机上运行,因为在模拟器上运行和真机有区别。
如果是独立开发手游,那么还要掌握一些基本的软件,如PhotoShop,Mappy,和简单的声效处理。
另外有需求的话可以学学JTWI,特别是Mobile 3D Graphics(M3G)技术,这是以后发展的趋势(由于本人对这块很薄弱,所以不能误导你,就不多说了)。
总之,你就再需要学JME和多练习,就够了。PS.一般来说JME工程师比JSE和JEE的待遇要好一些。而且从事游戏行业的上班玩游戏不会被骂。如果哪天你闲着无聊和同事聊天聊的太嚣张被BOSS看见了,他第一句应该是说“有闲功夫多玩玩游戏,闲聊什么天!。”
F. 求一个安卓开发小游戏源代码,临时交作业用
package com.fiveChess;
import android.app.Activity;
import android.os.Bundle;
import android.view.Display;
import android.view.Menu;
import android.view.MenuItem;
import android.view.Window;
import android.view.WindowManager;
public class MainActivity extends Activity {
GameView gameView = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
Display display = this.getWindowManager().getDefaultDisplay();
gameView = new GameView(this,display.getWidth(),display.getHeight());
setContentView(gameView);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
menu.add("重新开始").setIcon(android.R.drawable.ic_menu_myplaces);
menu.add("退出");
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if(item.getTitle().equals("重新开始")){
gameView.canPlay = true;
gameView.chess = new int[gameView.row][gameView.col];
gameView.invalidate();
}else if(item.getTitle().equals("退出")){
finish();
}
return super.onOptionsItemSelected(item);
}
}
package com.fiveChess;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.view.MotionEvent;
import android.view.View;
public class GameView extends View {
Context context = null;
int screenWidth,screenHeight;
String message = "";//提示轮到哪个玩家
int row,col; //划线的行数和列数
int stepLength = 30;//棋盘每格间距
int[][] chess = null;//0代表没有棋子,1代表是黑棋,2代表白旗
boolean isBlack = true;
boolean canPlay = true;
public GameView(Context context,int screenWidth,int screenHeight) {
super(context);
this.context = context;
this.screenWidth = screenWidth;
this.screenHeight = screenHeight;
this.message = "黑棋先行";
row = (screenHeight-50)/stepLength+1;
col = (screenWidth-10)/stepLength+1;
chess = new int[row][col];
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Paint paint = new Paint();
paint.setColor(Color.WHITE);
canvas.drawRect(0, 0, screenWidth, screenHeight, paint);//画背景
paint.setColor(Color.BLUE);
paint.setTextSize(25);
canvas.drawText(message, (screenWidth-100)/2, 30, paint);//画最顶层的字
paint.setColor(Color.BLACK);
//画棋盘
for(int i=0;i<row;i++){
canvas.drawLine(10, 50+i*stepLength, 10+(col-1)*stepLength, 50+i*stepLength, paint);
}
for(int i=0;i<col;i++){
canvas.drawLine(10+i*stepLength,50,10+i*stepLength,50+(row-1)*stepLength, paint);
}
for(int r=0;r<row;r++){
for(int c=0;c<col;c++){
if(chess[r][c] == 1){
paint.setColor(Color.BLACK);
paint.setStyle(Style.FILL);
canvas.drawCircle(10+c*stepLength, 50+r*stepLength, 10, paint);
}else if(chess[r][c] == 2){
//画白棋
paint.setColor(Color.WHITE);
paint.setStyle(Style.FILL);
canvas.drawCircle(10+c*stepLength, 50+r*stepLength, 10, paint);
paint.setColor(Color.BLACK);
paint.setStyle(Style.STROKE);
canvas.drawCircle(10+c*stepLength, 50+r*stepLength, 10, paint);
}
}
}
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if(!canPlay){return false;}
float x = event.getX();
float y = event.getY();
int r = Math.round((y-50)/stepLength);
int c = Math.round((x-10)/stepLength);
if(r<0 || r>row-1 || c<0 || c>col-1){return false;}
if(chess[r][c]!=0){return false;}//若有棋子则不再画棋子了
if(isBlack){
chess[r][c] = 1;
isBlack = false;
message = "轮到白棋";
}else{
chess[r][c] = 2;
isBlack = true;
message = "轮到黑棋";
}
invalidate();
if(judge(r, c,0,1)) return false;
if(judge(r, c,1,0)) return false ;
if(judge(r, c,1,1)) return false;
if(judge(r, c,1,-1)) return false;
return super.onTouchEvent(event);
}
private boolean judge(int r, int c,int x,int y) {//r,c表示行和列,x表示在y方向上的偏移,y表示在x方向上的偏移
int count = 1;
int a = r;
int b = c;
while(r>=0 && r<row && c>=0 && c<col && r+x>=0 && r+x<row && c+y>=0 && c+y<col && chess[r][c] == chess[r+x][c+y]){
count++;
if(y>0){
c++;
}else if(y<0){
c--;
}
if(x>0){
r++;
}else if(x<0){
r--;
}
}
while(a>=0 && a<row && b>=0 && b<col && a-x>=0 && a-x<row && b-y>=0 && b-y<col && chess[a][b] == chess[a-x][b-y]){
count++;
if(y>0){
b--;
}else if(y<0){
b++;
}
if(x>0){
a--;
}else if(x<0){
a++;
}
}
if(count>=5){
String str = "";
if(isBlack){
str = "白棋胜利";
}else{
str = "黑棋胜利";
}
new AlertDialog.Builder(context).setTitle("游戏结束").setMessage(str).setPositiveButton("重新开始", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
chess = new int[row][col];
invalidate();
}
}).setNegativeButton("观看棋局", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
canPlay = false;
}
}).show();
return true;
}
return false;
}
}
PS:五子棋,无需图片,直接在程序里画出来的。注意我发的是两个文件,一个activity,一个类文件,别把它当成一个文件了
G. 安卓哪一款五子棋软件比较厉害
截至目前,棋力较强的apk文件有:五子棋大师、tito gomoku android、五林大会安卓版、蜗牛连珠、小鱼儿五子棋、薯仔五子棋、renju solver android。其中蜗牛连珠、小鱼儿五子棋、薯仔五子棋、renju solver android比较强。另外renju solver是一个付费软件,价格200。
H. 用eclipse开发一个五子棋的小游戏,现在在layout里添加了一个重新开始的按钮,求按钮的代码
//运行代码很简单:在eclipse的项目中新建一个类Five.java把下面的代码放入该类即可//游戏运行:上下左右键控制方向,enter键确定棋子落定之处,黑白交替执行importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;/** *借鉴别人的。。。 */{ booleanstart=false; JFrameframe; ThreadtimerThread; inth,l;//定义变量 intpans[][]=newint[11][11];//变量初始值 intgbx=5; intgby=5; intziShu=0; intshui=0; Five(){ frame=newJFrame("五子棋"); frame.getContentPane().add(newScreen()); frame.addKeyListener(this); frame.setSize(12*40+5*2,12*40+22+5*2+100);//窗口大小 frame.setVisible(true); frame.repaint(); frame.addWindowListener(newWindowAdapter(){ publicvoidwindowClosing(WindowEvente){ System.exit(0); } });//关闭窗体 } publicvoidkeyPressed(KeyEventevt){ switch(evt.getKeyCode()){ caseKeyEvent.VK_ENTER: if(ziShu%2==0)//子数来判断谁赢 { heiXia(); }else{ Xia(); } shui=shuiYing(); break; caseKeyEvent.VK_ESCAPE: System.exit(1); break; caseKeyEvent.VK_LEFT: guangBiaoDong(-1,0);//光标动的坐标 break; caseKeyEvent.VK_RIGHT: guangBiaoDong(1,0);//光标动的坐标 break; caseKeyEvent.VK_DOWN: guangBiaoDong(0,1);//光标动的坐标 break; caseKeyEvent.VK_UP: guangBiaoDong(0,-1);//光标动的坐标 break; } frame.repaint();}@SuppressWarnings("serial")classScreenextendsJComponent{ publicvoidpaint(Graphicsg){ Graphics2Dg2d=(Graphics2D)g; xianShi(g2d);//画图 }}publicstaticvoidmain(String[]args){ newFive();} voidxianShi(Graphics2Dg2d)//显示 { xianShiQiPan(g2d);//显示棋盘 xianShiQiZis(g2d);//显示旗子 xianShiGuangBiao(g2d);//显示光标 g2d.setFont(newFont("STXingkai",1,30));//0708第二小组 g2d.setColor(Color.black); g2d.drawString("欢乐五子棋Java版",280,580); g2d.setFont(newFont("stCaiyun",1,40)); if(shui==0)//判断 { g2d.setColor(Color.black); xianShiTiShiXia(g2d);//显示谁下棋 }else{ g2d.setColor(Color.black); xianShiTiShiYing(g2d);//显示谁赢棋 } } voidguangBiaoDong(intfangX,intfangY)////光标动 { if(gbx+fangX>10||gbx+fangX10||gby+fangY=0&&kanx+fx=0&&kany+fy=0&&kanx-fx=0&&kany-fy=5?pans[gby][gbx]:0); }};运行结果:
I. 想做一个五子棋的小游戏程序,有没人做过的求推荐一个软件
用J2ME吧,图书馆书很多,你也可以上网下PDF《j2me手机应用开发大全》
J. 请问怎么用Android studio做一个五子棋小游戏,学艺不精环境配置也不太弄
作为一个初学者,想用Android Studio做一个简易的五子棋,希望路过的大...
答:需要的话可以传你份源码