




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Android开发-一个简单的五子棋游戏好了,下面直接贴代码:/* Five In a Row. (五子棋)* 这是一个简单的五子棋程序,是我自己的一个练习,贴出来跟大家分享。* 希望跟大家一起多交流。 我的GoogleTalk: lixinso */-/TBD:AI,悔棋/-package lixinsong.game.gobang;import android.app.Activity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.TextView;/这是主程序,继承自Activity,实现onCreate方法。:public class gobang extends Activity GobangView gbv; /* Called when the activity is first created. */ Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.main); gbv = (GobangView)this.findViewById(R.id.gobangview); gbv.setTextView(TextView)this.findViewById(R.id.text);里面的R.id.gobangview是在res中定义的View。 /五子棋的Viewpackage lixinsong.game.gobang;import android.content.Context;import android.content.res.Resources;import android.graphics.Bitmap;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Paint.Style;import android.graphics.drawable.Drawable;import android.util.AttributeSet;import android.util.Log;import android.view.KeyEvent;import android.view.MotionEvent;import android.view.View;import android.widget.TextView;/*棋盘一共1010格* 棋盘居中*/public class GobangView extends View implements Runnable public class GobangView extends View protected static int GRID_SIZE = 10; protected static int GRID_WIDTH = 30; / 棋盘格的宽度 protected static int CHESS_DIAMETER = 26; / 棋的直径 protected static int mStartX;/ 棋盘定位的左上角X protected static int mStartY;/ 棋盘定位的左上角Y private Bitmap mChessBW; / 黑棋和白棋 private static int mGridArray; / 网格 boolean key = false; int wbflag = 1; /该下白棋了=2,该下黑棋了=1. 这里先下黑棋(黑棋以后设置为机器自动下的棋子) int mLevel = 1; /游戏难度 int mWinFlag = 0; private final int BLACK=1; private final int WHITE=2; int mGameState = GAMESTATE_RUN; /游戏阶段:0=尚未游戏,1=正在进行游戏,2=游戏结束 static final int GAMESTATE_PRE = 0; static final int GAMESTATE_RUN = 1; static final int GAMESTATE_PAUSE = 2; static final int GAMESTATE_END = 3; /private TextView mStatusTextView; / 根据游戏状态设置显示的文字 public TextView mStatusTextView; / 根据游戏状态设置显示的文字 private Bitmap btm1; private final Paint mPaint = new Paint(); CharSequence mText; CharSequence STRING_WIN = White win! n Press Fire Key to start new game.; CharSequence STRING_LOSE = Black win! n Press Fire Key to start new game.; CharSequence STRING_EQUAL = Cool! You are equal! n Press Fire Key to start new Game.; public GobangView(Context context, AttributeSet attrs, int defStyle) super(context, attrs, defStyle); public GobangView(Context context, AttributeSet attrs) /好像调用的是这个构造函数,为什么不是前面的呢 super(context, attrs); this.setFocusable(true); /20090530 this.setFocusableInTouchMode(true); init(); /这里画棋子后来没有用图片画,而是直接画了圆。因为我做的图片不好看。 / 初始化黑白棋的Bitmap public void init() mGameState = 1; /设置游戏为开始状态 wbflag = BLACK; /初始为先下黑棋 mWinFlag = 0; /清空输赢标志。 mGridArray = new intGRID_SIZE-1GRID_SIZE-1; mChessBW = new Bitmap2; Bitmap bitmap = Bitmap.createBitmap(CHESS_DIAMETER, CHESS_DIAMETER, Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(bitmap); Resources r = this.getContext().getResources(); Drawable tile = r.getDrawable(R.drawable.chess1); tile.setBounds(0, 0, CHESS_DIAMETER, CHESS_DIAMETER); tile.draw(canvas); mChessBW0 = bitmap; tile = r.getDrawable(R.drawable.chess2); tile.setBounds(0, 0, CHESS_DIAMETER, CHESS_DIAMETER); tile.draw(canvas); mChessBW1 = bitmap; public void setTextView(TextView tv) mStatusTextView =tv; mStatusTextView.setVisibility(View.INVISIBLE); Override protected void onSizeChanged(int w, int h, int oldw, int oldh) mStartX = w / 2 - GRID_SIZE * GRID_WIDTH / 2; mStartY = h / 2 - GRID_SIZE * GRID_WIDTH / 2; Override public boolean onTouchEvent(MotionEvent event) switch (mGameState) case GAMESTATE_PRE: break; case GAMESTATE_RUN: int x; int y; float x0 = GRID_WIDTH - (event.getX() - mStartX) % GRID_WIDTH; float y0 = GRID_WIDTH - (event.getY() - mStartY) % GRID_WIDTH; if (x0 GRID_WIDTH / 2) x = (int) (event.getX() - mStartX) / GRID_WIDTH); else x = (int) (event.getX() - mStartX) / GRID_WIDTH) - 1; if (y0 = 0 & x = 0 & y GRID_SIZE - 1) if (mGridArrayxy = 0) if (wbflag = BLACK) putChess(x, y, BLACK); /this.mGridArrayxy = 1; if(checkWin(BLACK) /如果是黑棋赢了 mText = STRING_LOSE; mGameState = GAMESTATE_END; showTextView(mText); else if(checkFull()/如果棋盘满了 mText = STRING_EQUAL; mGameState = GAMESTATE_END; showTextView(mText); wbflag = WHITE; else if (wbflag = WHITE) putChess(x, y, WHITE); /this.mGridArrayxy = 2; if(checkWin(WHITE) mText = STRING_WIN; mGameState = GAMESTATE_END; showTextView(mText); else if(checkFull()/如果棋盘满了 mText = STRING_EQUAL; mGameState = GAMESTATE_END; showTextView(mText); wbflag = BLACK; break; case GAMESTATE_PAUSE: break; case GAMESTATE_END: break; this.invalidate(); return true; Override public boolean onKeyDown(int keyCode, KeyEvent msg) Log.e(KeyEvent.KEYCODE_DPAD_CENTER, + keyCode); if(keyCode = KeyEvent.KEYCODE_DPAD_CENTER) switch(mGameState) case GAMESTATE_PRE: break; case GAMESTATE_RUN: break; case GAMESTATE_PAUSE: break; case GAMESTATE_END: /游戏结束后,按CENTER键继续 Log.e(Fire Key Pressed:, FIRE); mGameState = GAMESTATE_RUN; this.setVisibility(View.VISIBLE); this.mStatusTextView.setVisibility(View.INVISIBLE); this.init(); this.invalidate(); break; return super.onKeyDown(keyCode, msg); Override public void onDraw(Canvas canvas) canvas.drawColor(Color.YELLOW); / 画棋盘 Paint paintRect = new Paint(); paintRect.setColor(Color.GRAY); paintRect.setStrokeWidth(2); paintRect.setStyle(Style.STROKE); for (int i = 0; i GRID_SIZE; i+) for (int j = 0; j GRID_SIZE; j+) int mLeft = i * GRID_WIDTH + mStartX; int mTop = j * GRID_WIDTH + mStartY; int mRright = mLeft + GRID_WIDTH; int mBottom = mTop + GRID_WIDTH; canvas.drawRect(mLeft, mTop, mRright, mBottom, paintRect); /画棋盘的外边框 paintRect.setStrokeWidth(4); canvas.drawRect(mStartX, mStartY, mStartX + GRID_WIDTH*GRID_SIZE, mStartY + GRID_WIDTH*GRID_SIZE, paintRect); /画棋子 for (int i = 0; i GRID_SIZE-1; i+) for (int j = 0; j GRID_SIZE-1; j+) if(mGridArrayij = BLACK) /通过图片来画 /canvas.drawBitmap(mChessBW0, mStartX + (i+1) * GRID_WIDTH - CHESS_DIAMETER/2 , mStartY + (j+1)* GRID_WIDTH - CHESS_DIAMETER/2 , mPaint); /通过圆形来画 Paint paintCircle = new Paint(); paintCircle.setColor(Color.BLACK); canvas.drawCircle(mStartX + (i+1) * GRID_WIDTH, mStartY + (j+1)* GRID_WIDTH, CHESS_DIAMETER/2, paintCircle); else if(mGridArrayij = WHITE) /通过图片来画 /canvas.drawBitmap(mChessBW1, mStartX + (i+1) * GRID_WIDTH - CHESS_DIAMETER/2 , mStartY + (j+1)* GRID_WIDTH - CHESS_DIAMETER/2 , mPaint); /通过圆形来画 Paint paintCircle = new Paint(); paintCircle.setColor(Color.WHITE); canvas.drawCircle(mStartX + (i+1) * GRID_WIDTH, mStartY + (j+1)* GRID_WIDTH, CHESS_DIAMETER/2, paintCircle); public void putChess(int x, int y, int blackwhite) mGridArrayxy = blackwhite; public boolean checkWin(int wbflag) for(int i = 0; i GRID_SIZE - 1 ; i+ ) /i表示列(根据宽度算出来的) for(int j = 0; j GRID_SIZE - 1; j+)/i表示行(根据高度算出来的) /检测横轴五个相连 if(i+4) (GRID_SIZE - 1)& (mGridArrayij = wbflag) & (mGridArrayi+1j = wbflag)& (mGridArrayi + 2j = wbflag) & (mGridArrayi + 3j = wbflag) & (mGridArrayi + 4j = wbflag) Log.e(check win or loss:, wbflag + win); mWinFlag = wbflag; /纵轴5个相连 if(j+4) (GRID_SIZE - 1)& (mGridArrayij = wbflag) & (mGridArrayij+1 = wbflag)& (mGridArrayi j+ 2 = wbflag) & (mGridArr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 基层拆除施工方案(3篇)
- 福田深水井施工方案(3篇)
- 咸宁庭院假山施工方案(3篇)
- 施工方案优化钢筋(3篇)
- 二装施工方案(3篇)
- 北京市昌平区2024-2025学年八年级下学期第二次月考历史题目及答案
- 新春趣味猜谜题目及答案
- 写意头像测试题目及答案
- 小羊和狼数学题目及答案
- 蓝色画风初中新生入学指南
- LY/T 3408-2024林下经济术语
- 肾内科医生进修总结汇报
- 小学数学跨学科学习案例
- 无人机驾照考证知识题
- 肺栓塞课件完整版本
- 心电监护的并发症及预防
- 风电场知识培训课件下载
- 生态经济学-杨建州-课件专题
- 《民用无人机作业气象条件等级 植保》
- 香港借住合同范例
- 安全伴我行-大学生安全教育知到智慧树章节测试课后答案2024年秋哈尔滨工程大学
评论
0/150
提交评论