高分给Java补个小游戏?(80后玩过,90后可能看不懂)
导入Java . awt . color;
导入Java . awt . font;
导入Java . awt . graphics;
导入Java . awt . graphics 2d;
导入Java . awt . point;
导入Java . awt . event . mouse event;
导入Java . awt . event . mouse listener;
导入javax . swing . jframe;
公共类游戏扩展JFrame实现MouseListener
{
/**
*
*/
private static final long serialVersionUID = 1L;
公共游戏()
{
this . set layout(null);//
This.setTitle(“成三棋”);
this . addmouse listener(this);
this.setSize(800,600);
this . setlocationrelativeto(null);
//窗口位于屏幕的中央
this . setdefaultcloseoperation(JFrame。EXIT _ ON _ CLOSE);
this . setresizable(false);
//窗口大小不能自动调整。
this . set visible(true);
}
公共静态void main(String[] args) {
// TODO自动生成的方法存根
新游戏();
}
/*
*用数组位置来表示棋盘上点的状态。
*不能下棋的地方设为0。
*可以下棋的地方设置为1。
* 2已经下过棋子,颜色为绿色。
* 3已下过棋子,颜色为橙色。
*在放置棋子阶段,如果错过某个位置被对方吃掉,则设置为4。
*/
int[][]position = new int[13][13];
{
for(int I = 0;我& lt=12;i=i+2)
{
如果(我!=6)
{
position[I][I]= 1;
位置[I][12-I]= 1;
位置[I][6]= 1;
position[6][I]= 1;
}
}
}
//定义一个二维数组来存储,24位可以取为1234。
//指示当前状态。
int state = 1;
/*
*用1表示放置棋子(默认)。
*吃棋子用2(点对方棋子)。
*用3表示国际象棋的第一步,即点击自己的棋子。
*用4表示下棋的第二步,即点击相邻的下棋空白点。
*/
//定义棋盘的起始坐标。
int a=60,b=60,c = 60
int x,y,r = c/4;
//定义绿棋已经下过的棋子数。
int green num = 0;
//定义绿方吃掉的棋子数。
int greeneat = 0;
//定义黄色已经玩过的棋子数。
int orangenum = 0;
//定义黄芳吃掉的棋子数。
int orangee at = 0;
//定义棋手的状态。默认情况下,绿色玩家先玩。
布尔绿色=真;
//设置提示信息的字体
Font font =新字体(“中文刻字”,字体。粗体,25);//font字体
//提示玩家下棋。
String s= "请将棋子放在绿色的一面";
String s1= "放在绿色一边的棋子数:";
String s2= "放在黄边的棋子数:";
String s0= "现在是象棋阶段";
字符串s3 = null
//保存之前的信息。
int xx,YY;
公共空白油漆(图形g)
{
super . paint components(g);//清除屏幕并重新绘制
graphics 2d g2d =(graphics 2d)g;
//传递给Graphics2D对象的所有坐标都在一个与设备无关的坐标系中指定,该坐标系称为用户空间,是应用程序使用的坐标系。
g2d.setColor(颜色。黑色);
//画一个棋盘
draw棋盘(g2d,a,b,c);
拉伸件(g2d);
g2d.setColor(颜色。黑色);
g2d.setFont(字体);
g2d .抽绳(s,450,450);
g2d . drawstring(s 1+greennum,350,500);
g2d.drawString(s2+orangenum,350,550);
g2d.drawString("state="+state,50,500);
g2d . drawstring(GREEN+" "+(greennum+orangenum),200,500);
g2d .拉绳(s0,50,550);
如果(s3!=空)
{
g2d .抽绳(s3,500,50);
}
}
//绘制棋子的方法
公共空图纸(图形2D g2d)
{
for(int I = 0;我& lt13;i++)
{
for(int j = 0;j & lt13;j++)
{
int plecesX = a+I * c/2;
int plecesY = b+j * c/2;
if(位置[i][j]==2)//
{
g2d.setColor(颜色。绿色);
g2d.fillOval(plecesX-r,plecesY-r,2*r,2 * r);//用当前颜色填充包围指定矩形框的椭圆。
}
if(位置[i][j]==3)
{
g2d.setColor(颜色。橙色);
g2d.fillOval(plecesX-r,plecesY-r,2*r,2 * r);
}
}
}
}
//绘制棋盘的方法
public void棋盘(Graphics2D g2d,int a,int b,int c)
{
for(int I = 0;我& lt7;i++)
{
g2d.drawLine(a+i*c,b+i*c,a+(6-i)*c,b+I * c);
g2d.drawLine(a+i*c,b+i*c,a+i*c,b+(6-I)* c);
}
g2d.drawLine(a,b+3*c,a+2*c,b+3 * c);
g2d.drawLine(a+4*c,b+3*c,a+6*c,b+3 * c);
g2d.drawLine(a+3*c,b,a+3*c,b+2 * c);
g2d.drawLine(a+3*c,b+4*c,a+3*c,b+6 * c);
}
//判断输赢的方法
公共布尔win(int x,int y)
{
布尔b =假;
如果(x==6)
{
if(position[y][y]= = position[6][y]& amp;& amp
位置[6][y]= =位置[12-y][y])
b =真;
else if(位置[6][0]= =位置[6][2]& amp;& amp
位置[6][0]= =位置[6][4]& amp;& ampy & lt6)
b =真;
else if(位置[6][8]= =位置[6][10]& amp;& amp
位置[6][8]= =位置[6][12]& amp;& ampy & gt6)
b =真;
}
else if(y==6)
{
if(位置[x][x]= =位置[x][6]& amp;& amp
位置[x][x]= =位置[x][12-x])
b =真;
else if(位置[0][6]= =位置[2][6]& amp;& amp
位置[0][6]= =位置[4][6]& amp;& ampx & lt6)
b =真;
else if(position[8][6]= position[10][6]& amp;& amp
位置[8][6]= =位置[12][6]& amp;& ampx & gt6)
b =真;
}
其他
{
if(位置[x][y]= =位置[x][6]& amp;& amp
位置[x][y]= =位置[x][12-y])
b =真;
if(位置[x][y]= =位置[6][y]& amp;& amp
位置[x][y]= =位置[12-x][y])
b =真;
}
返回b;
}
//判断两个棋子相邻的方法
public boolean isnext(int xx,int yy,int x,int y)
{
布尔b =假;
if(x = = xx & amp;& ampy!=yy)//在同一垂直线上
{
if(xx = = 6 & amp;& ampMath.abs(y-yy)==2)//返回绝对值。
b =真;
else if(xx!= 6 & amp& ampMath.abs(y-yy)==(6-Math.min(xx,12-xx)))
b =真;
其他
b =假;
}
else if(y = = YY & amp;& ampx!=xx)//在同一水平线上
{
if(YY = = 6 & amp;& ampMath.abs(x-xx)==2)
b =真;
else if(yy!= 6 & amp& ampMath.abs(x-xx)==(6-Math.min(yy,12-yy)))
b =真;
其他
b =假;
}
其他
b =假;
返回b;
}
//放置棋子的方法state=1
公共void PlacePiece(int x,int y,boolean b)
{
//首先判断棋子是否可以放在这里。
if(位置[x][y]==1)
{
//判断放的是哪个棋子。
//如果绿方放置棋子。
如果(b = =真)
{
position[x][y]= 2;
green num++;
}
//如果棋子放在黄色。
如果(b = =假)
{
位置[x][y]= 3;
orangenum++;
}
//摆放棋子后判断是否有三块相连。
if(win(x,y))
{
//设置当前状态吃对方棋子。
状态= 2;
s=b?“请要求绿方去掉黄方的一块”:“请要求黄方去掉绿方的一块”;
}
其他
{
绿色=b?假:真;
if(orangenum+greennum & lt;18)
{
状态= 1;
s =绿色?“请把棋子放在绿色的一边”:“请把棋子放在黄色的一边”;
}
其他
{
S0= "现在是象棋阶段";
状态= 3;
s =绿色?“请走绿色:点击自己的棋子”:“请走黄色:点击自己的棋子”;
}
}
}
其他
{
s =绿色?“请点击绿色边的有效棋点”:“请点击黄色边的有效棋点”;
}
}
//去掉别人的棋子state=2
public void Remove(int x,int y,boolean b)
{
//如果绿方下棋,
如果(b = =真)
{
//判断对方棋子是否被点击。
if(位置[x][y]==3)
{
//如果点击成功。
如果(!win(x,y))
{
position[x][y]= 4;
绿色=假;
orangee at++;
if(greennum+orangenum & lt;18)
{
状态= 1;
S= "请让黄方下棋";
}否则
{
状态= 3;
S= "请黄芳下棋:点自己的棋子";
}
}
其他
{
S= "请点击对方有效棋子上的绿色边";
}
}
其他
{
S= "请点击绿色边的对方棋子!";
}
}
其他
{
//判断对方棋子是否被点击。
if(位置[x][y]==2)
{
如果(!win(x,y))
{
position[x][y]= 4;
绿色=真;
greeneat++;
if(greennum+orangenum & lt;18)
{
状态= 1;
S= "请让绿方下棋";
}
其他
{
状态= 3;
S= "请走绿色:点击您自己的作品";
}
}
其他
{
S= "请点击对方有效棋子";
}
}
其他
{
S= "请点击对方的棋子!";
}
}
}
//象棋第一步:点击自己的棋子状态=3。
public void zouqione(int x,int y)
{
//判断目前谁应该下棋
//如果绿方走棋,
if(绿色= =真)
{
//判断绿色棋子是否被点击。
if(位置[x][y]==2)
{
xx = x;
YY = y;
S= "请点击绿色边放置";
状态= 4;
}
其他
{
S= "请走绿色:点击您自己的作品";
}
}
其他
{
//判断黄色棋子是否被点击。
if(位置[x][y]==3)
{
xx = x;
YY = y;
S= "请点击要放置的位置";
状态= 4;
}
其他
{
S= "请黄芳下棋:点自己的棋子";
}
}
}
//国际象棋第一步:点击新位置state=4。
public void zouqitwo(int x,int y)
{
//判断点击的位置是否空闲。
if(position[x][y]= = 1 | | position[x][y]= = 4)
{
//如果点击的位置相邻。
if(isnext(xx,yy,x,y))
{
//更改位置的属性
位置[xx][YY]= 1;
如果(绿色)
position[x][y]= 2;
如果(!绿色)
位置[x][y]= 3;
//判断是不是三。
if(win(x,y))
{
//设置状态吃对方一颗棋子。
状态= 2;
s =绿色?“请要求绿方去掉黄方的一块”:“请要求黄方去掉绿方的一块”;
}
其他
{
绿色=绿色?假:真;
s =绿色?“请走绿色:点击自己的棋子”:“请走黄色:点击自己的棋子”;
//将状态设置为对手的移动。
状态= 3;
}
}否则
{
s =绿色?“请点击绿色边的相邻棋位”:“请点击黄色边的相邻棋位”;
}
}
其他
{
s =绿色?“请点击可放置的绿色边”:“请点击可放置的黄色边”;
}
}
@覆盖
public void mouse clicked(mouse event e){
point p = e . get point();
//getpoint()选择一个点。
if(p . x & gt;a-c/4 & amp;& ampp.x & lta+6 * c+c/4 & amp;& ampp.y & gtb-c/4 & amp;& ampp.y & ltb+6*c+c/4)
{
x =(p . x-a+c/4)* 2/c;
y =(p . y-b+ c/4)* 2/c;
//处理下棋
if(state==1)
PlacePiece(x,y,绿色);
else if(state==2)
移除(x,y,绿色);
else if(state==3)
zouqione(x,y);
else if(state==4)
zouqitwo(x,y);
if(9-greeneat & lt;3)
{
S3=“绿方输了!”;
S= "游戏结束";
//移除鼠标监视器
this . remove mouse listener(this);
}
if(9-orangee at & lt;3)
{
S3=“黄芳输了!”;
S= "游戏结束";
//移除鼠标监视器
this . remove mouse listener(this);
}
repaint();
//对于你画的东西,比如画布,自定义图像,你需要自己写程序来控制。
}
其他
{
}
}
public void mouse pressed(mouse event e){ }
public void mouse released(mouse event e){ }
public void mouse enter(mouse event e){ }
public void mouse exited(mouse event e){ }
}