/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;
/**
*
* @author Calidan
*/
public class GameCanvas extends Canvas implements Runnable{
//当前下棋人 1黑棋 2白棋
int turn;
//下棋光标作标
int cursorX=0,cursorY=0;
//游戏结束 有一方胜利时gameFinished>0
int gameFinished;
//棋盘0无棋子 1黑棋 2白棋
int[][] chessTable=new int[15][15];
//棋盘开始边距
int startX=15;
int startY=15;
//创建播放器实例
MusicPlayer mp=new MusicPlayer();
//创建蓝牙连接实例
private WirelessDevice remoteDevice=new WirelessDevice();;
//线程变量
private Thread t;
//游戏状态
private int state=0;
//主机和客户变量 1主机 2客户
private int side=0;
//初始化函数
private void gameInit(){
//设置黑棋先下
turn=1;
//游戏没有进行中
gameFinished=0;
//初始化棋盘 全清
for(int i=0;i<15;i++){
for(int j=0;j<15;j++){
chessTable[i][j]=0;
}
}
}
public GameCanvas(){
//使游戏全屏
this.setFullScreenMode(true);
//初始化游戏
gameInit();
//播放背景音乐
mp.playBGSound();
//建立线程
t=new Thread(this);
t.start();
}
//游戏逻辑函数
private int setChess(int x,int y){
int count=0;
if(chessTable[y][x]!=0)return 0;
else{
chessTable[y][x]=turn;
//横向
for(int i=1;i<5 && x+i<15;i++){
if(chessTable[y][x+i]==turn)count++;
}
for(int i=-1;i>-5 && x+i>=0;i--){
if(chessTable[y][x+i]==turn)count++;
}
if(count==4)return turn;
//竖向
count=0;
for(int i=1;i<5 && y+i<15;i++){
if(chessTable[y+i][x]==turn)count++;
}
for(int i=-1;i>-5 && y+i>=0;i--){
if(chessTable[y+i][x]==turn)count++;
}
if(count==4)return turn;
//斜向1
count=0;
for(int i=1;i<5 && y+i<15 && x+i<15;i++){
if(chessTable[y+i][x+i]==turn)count++;
}
for(int i=-1;i>-5 && y+i>=0 && x+i>=0;i--){
if(chessTable[y+i][x+i]==turn)count++;
}
if(count==4)return turn;
//斜向2
count=0;
for(int i=1;i<5 && y-i>=0 && x+i<15;i++){
if(chessTable[y-i][x+i]==turn)count++;
}
for(int i=-1;i>-5 && y-i<15 && x+i>=0;i--){
if(chessTable[y-i][x+i]==turn)count++;
}
if(count==4)return turn;
//切换用户
turn=(turn==1)?2:1;
return 0;
}
}
//接口函数判断按键响应事件
protected void keyPressed(int keyCode){
if(state==0){
//做主机按1
if(keyCode==KEY_NUM1)side=1;
//做客户按2
if(keyCode==KEY_NUM2)side=2;
}else if(state==2){
if(gameFinished==0){
//按键移动光标
if(keyCode==KEY_NUM2 && cursorY>0)cursorY--;
else if(keyCode==KEY_NUM8 && cursorY<14)cursorY++;
else if(keyCode==KEY_NUM4 && cursorX>0)cursorX--;
else if(keyCode==KEY_NUM6 && cursorX<14)cursorX++;
else if(keyCode==KEY_NUM5){
if(turn==side){
//游戏结束 gameFinished>0
gameFinished=setChess(cursorX,cursorY);
//写入蓝牙流
remoteDevice.writeData((byte)cursorX);
remoteDevice.writeData((byte)cursorY);
//播放走棋音乐
mp.playMoveSound();
}
}else if(keyCode==KEY_STAR){
remoteDevice.writeData((byte)20);
remoteDevice.writeData((byte)20);
gameFinished=3;
}
}else gameInit();
//从新绘制场景
repaint();
}
}
protected void pointerPressed(int x, int y) {
cursorX=(x-startX+6)/15;
cursorY=(y-startY+6)/15;
if(x>15 && x<75 && y>260 && y<276)keyPressed(KEY_STAR);
if(cursorX<0 || cursorX>14 || cursorY<0 || cursorY>14)return;
keyPressed(KEY_NUM5);
}
private void drawBoard(Graphics g){
//画背景色
g.setColor(200,184,189);
g.fillRect(0,0,240,320);
g.setColor(0,0,0);
//绘制棋盘
g.drawRect(startX-2,startX-2,214,214);
for(int i=0;i<15;i++){
g.drawLine(i*15+startX,0+startY,i*15+startX,210+startY);
g.drawLine(startX,i*15+startY,210+startX,i*15+startY);
}
g.drawRect(15,260,60,16);
g.drawString("重新开局",18,260,Graphics.TOP|Graphics.LEFT);
}
private void drawChess(Graphics g){
//根据chessTable绘制棋子
for(int i=0;i<15;i++){
for(int j=0;j<15;j++){
if(chessTable[i][j]==1){
g.setColor(0,0,0);
g.fillRoundRect(j*15+startX-6,i*15+startY-6,12,12,12,12);
}
if(chessTable[i][j]==2){
g.setColor(255,255,255);
g.fillRoundRect(j*15+startX-6,i*15+startY-6,12,12,12,12);
}
}
}
}
private void drawCursor(Graphics g){
//绘制下棋光标
if(gameFinished==0){
g.setColor(255,0,0);
g.drawRect(startX-8+cursorX*15,startY-8+cursorY*15,15,15);
g.setColor(0,0,0);
}
}
private void displayCurrentPlayer(Graphics g){
//显示当前下棋人
String player="黑棋";
if(turn==2)player="白棋";
g.drawString(">> "+player,15,230,Graphics.TOP|Graphics.LEFT);
}
private void logic(Graphics g){
//游戏结束处理
if(gameFinished>0){
//打印胜利对话框
String winner="";
if(gameFinished==2)winner="白棋";
else if(gameFinished==1)winner="黑棋";
g.setColor(255,244,244);
g.fillRect(50,50,150,50);
g.setColor(0,0,0);
if(gameFinished<3 && gameFinished>0){
g.drawString(winner+" 胜利",55,55,Graphics.TOP|Graphics.LEFT);
}
g.drawString("按任意键 [从新开局]",55,75,Graphics.TOP|Graphics.LEFT);
}
}
public void run() {
while(true){
//如果是主机
if(side==1){
remoteDevice.doServer();
break;
//如果是客户
}else if(side==2){
remoteDevice.doClient();
break;
}
}
//状态2 等待客户 知道连接
state=1;
while(true){
try {
repaint();
Thread.sleep(500);
} catch (InterruptedException ex) {}
if(remoteDevice.isConnected()){
state=2;
break;
}
}
repaint();
//开始游戏
state=2;
while(true){
if(remoteDevice.getDataNumber()>0){
int x=remoteDevice.readData();
int y=remoteDevice.readData();
System.out.println(x);
System.out.println(y);
if(turn!=side && x<15 && y<15)gameFinished=setChess(x,y);
else if(x==20 && y==20){
gameFinished=3;
}
j2me五子棋j2me五子棋j2me五子棋
5星 · 超过95%的资源 需积分: 9 201 浏览量
2010-12-27
15:26:34
上传
评论
收藏 47KB RAR 举报
jasiken
- 粉丝: 0
- 资源: 8
最新资源
- Python大作业:音乐播放软件(爬虫+可视化+数据分析+数据库)
- 课程设计-python爬虫-爬取日报,爬取日报文章后存储到本地,附带源代码+课程设计报告
- 软件和信息技术服务行业投资与前景预测.pptx
- 课程设计-基于SpringBoot + Mybatis+python爬虫NBA球员数据爬取可视化+源代码+文档+sql+效果图
- 软件品质管理系列二项目策划规范.doc
- 基于TensorFlow+PyQt+GUI的酒店评论情感分析,支持分析本地数据文件和网络爬取数据分析+源代码+文档说明+安装教程
- 软件定义无线电中的模拟电路测试技术.pptx
- 软件开发协议(作为技术开发合同附件).doc
- 软件开发和咨询行业技术趋势分析.pptx
- 软件测试题详解及答案.doc
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈