求助,做个java五子棋或者安卓记账app。

1.五子棋棋盘

[java]查看普通副本打印?

包cn . edu . ouc . five chess;

导入Java . awt . color;

导入Java . awt . cursor;

导入Java . awt . dimension;

导入Java . awt . graphics;

导入Java . awt . graphics 2d;

导入Java . awt . image;

导入Java . awt . radial gradientpaint;

导入Java . awt . rendering hints;

导入Java . awt . toolkit;

导入Java . awt . event . mouse event;

导入Java . awt . event . mouse listener;

导入Java . awt . event . mousemotionlistener;

导入Java . awt . geom . ellipse 2d;

导入javax . swing . *;

/**

*五子棋-棋盘

*/

公共类棋盘扩展JPanel实现MouseListener {

公共静态最终int MARGIN = 30//边距

public static final int GRID _ SPAN = 35;//网格间距

公共静态final int ROWS = 15;//棋盘行数

公共静态final int COLS = 15;//棋盘列数

Point[]chess list =新点[(ROWS+1)*(COLS+1)];//最初,每个数组元素都为空。

boolean isBlack = true//默认开始是黑色的。

布尔gameOver = false//游戏结束了吗?

int chessCount//棋盘的当前数量

int xIndex,yIndex//当前刚刚放置的棋子的索引。

图像img

图像阴影;

Color colortemp

公共棋盘(){

//set background(color . blue);//将背景色设置为橙色。

img=Toolkit.getDefaultToolkit()。getImage(" board . jpg ");

shadows = toolkit . getdefaulttoolkit()。getImage(" shadows . jpg ");

addmouse listener(this);

addMouseMotionListener(new MouseMotionListener(){

public void mouse dragged(mouse event e){

}

public void mouse moved(mouse event e){

int x 1 =(e . getx()-MARGIN+GRID _ SPAN/2)/GRID _ SPAN;

//将鼠标点击的坐标位置转换为网格索引。

int y 1 =(e . gety()-MARGIN+GRID _ SPAN/2)/GRID _ SPAN;

//游戏结束了,不能下车。

//摔下棋盘就下不了了。

//X和Y位置已经存在棋子,不能移除。

if(x 1 & lt;0 | | x 1 & gt;ROWS | | y 1 & lt;0 | | y 1 & gt;COLS | | game over | | find chess(x 1,y1))

setCursor(新光标(光标。DEFAULT _游标));

//设置为默认状态

else setCursor(新光标(光标。手_光标));

}

});

}

//绘制

public void paint component(Graphics g){

super . paint component(g);//画一个棋盘

int img width = img . getwidth(this);

int img height = img . get height(this);//获取图片的宽度和高度。

int FWidth = getWidth();

int FH height = getHeight();//获取窗口的宽度和高度。

int x =(FWidth-img width)/2;

int y =(FH height-img height)/2;

g.drawImage(img,x,y,null);

for(int I = 0;我& lt=行;I++){//画一条水平线

g.drawLine(MARGIN,MARGIN+i*GRID_SPAN,MARGIN+COLS*GRID_SPAN,MARGIN+I * GRID _ SPAN);

}

for(int I = 0;我& lt= COLSI++){//画一条垂直线

g.drawLine(MARGIN+i*GRID_SPAN,MARGIN,MARGIN+i*GRID_SPAN,MARGIN+ROWS * GRID _ SPAN);

}

//画棋子

for(int I = 0;我& ltchessCounti++){

//网格交点x,y坐标

int xPos=chessList[i]。getX()* GRID _ SPAN+MARGIN;

int yPos=chessList[i]。getY()* GRID _ SPAN+MARGIN;

g.setColor(chessList[i].getColor());//设置颜色

// g.fillOval(xPos-Point。直径/2,yPos-Point.DIAMETER/2,

//点。直径,点。直径);

//g.drawImage(阴影,xPos-Point.DIAMETER/2, yPos-Point.DIAMETER/2,点。直径,点。直径,空);

colortemp=chessList[i]。getColor();

if(colortemp==Color.black){

radial gradient paint paint = new radial gradient paint(xPos-Point。直径/2+25,yPos-Point.DIAMETER/2+10, 20,新浮动[]{0f,1f}

,新颜色[]{颜色。白色,彩色。黑色});

((Graphics2D) g)。setPaint(绘画);

((Graphics2D) g)。setRenderingHint(rendering hints。KEY _抗锯齿,渲染提示。VALUE _ ANTIALIAS _ ON);

((Graphics2D) g)。setRenderingHint(rendering hints。KEY _ ALPHA _插值,渲染提示。VALUE _ ALPHA _插值_默认);

}

else if(color temp = = color . white){

radial gradient paint paint = new radial gradient paint(xPos-Point。直径/2+25,yPos-Point.DIAMETER/2+10, 70,新浮动[]{0f,1f}

,新颜色[]{颜色。白色,彩色。黑色});

((Graphics2D) g)。setPaint(绘画);

((Graphics2D) g)。setRenderingHint(rendering hints。KEY _抗锯齿,渲染提示。VALUE _ ANTIALIAS _ ON);

((Graphics2D) g)。setRenderingHint(rendering hints。KEY _ ALPHA _插值,渲染提示。VALUE _ ALPHA _插值_默认);

}

Ellipse2D e = new Ellipse2D。浮点型(xPos-Point。直径/2,yPos-Point.DIAMETER/2, 34,35);

((Graphics2D) g)。填充(e);

//标记最后一个棋子的红色矩形框。

If(i==chessCount-1){//如果是最后一颗棋子,

g . set color(color . red);

g.drawRect(xPos-Point。直径/2,yPos-Point.DIAMETER/2,

34, 35);

}

}

}

public void mouse pressed(mouse event e){//在组件上按下鼠标时调用。

//游戏结束,不能再下载了。

if(gameOver)返回;

String colorName=isBlack?《黑棋》:“白棋”;

//将鼠标点击的坐标位置转换为网格索引。

xIndex =(e . getx()-MARGIN+GRID _ SPAN/2)/GRID _ SPAN;

yIndex =(e . gety()-MARGIN+GRID _ SPAN/2)/GRID _ SPAN;

//摔下棋盘就下不了了。

if(xIndex & lt;0 | | xIndex & gt行数| | yIndex & lt0 | | yIndex & gtCOLS)

返回;

//如果一个棋子已经存在于X和Y位置,则不能移除。

if(findChess(xIndex,yIndex))返回;

//可以在进行中完成的处理

点ch =新点(xIndex,yIndex,isBlack?Color.black:彩色.白色);

chess list[ches count++]= ch;

repaint();//通知系统重画。

//赢了会有提示,不能继续下棋。

if(isWin()){

String msg=String.format("祝贺您,%s赢了!",color name);

joptionpane . showmessagedialog(this,msg);

gameOver = true

}

isBlack=!isBlack

}

//重写mouseListener的方法

public void mouse clicked(mouse event e){

//在组件上单击鼠标按钮时调用。

}

public void mouse enter(mouse event e){

//当鼠标进入组件时调用。

}

public void mouse exited(mouse event e){

//当鼠标离开组件时调用。

}

public void mouse released(mouse event e){

//在组件上释放鼠标按钮时调用。

}

//找出棋子数组中是否有索引为x,y的棋子。

private boolean findChess(int x,int y){

for(c点:chessList){

如果(c!= null & amp& ampgetx()= = x & amp;& ampc.getY()==y)

返回true

}

返回false

}

私有布尔值isWin(){

int continue count = 1;//连续片段的数量

//水平向西看

for(int x = xIndex-1;x & gt=0;x - ){

Color c=isBlack?颜色.黑色:颜色.白色;

if(getChess(x,yIndex,c)!=null){

continue count++;

}否则

打破;

}

//水平向东看

for(int x = xIndex+1;x & lt= COLSx++){

Color c=isBlack?颜色.黑色:颜色.白色;

if(getChess(x,yIndex,c)!=null){

continue count++;

}否则

打破;

}

if(continue count & gt;=5){

返回true

}否则

continue count = 1;

//继续另一个垂直搜索。

//向上搜索

for(int y = yIndex-1;y & gt=0;y - ){

Color c=isBlack?颜色.黑色:颜色.白色;

if(getChess(xIndex,y,c)!=null){

continue count++;

}否则

打破;

}

//垂直向下看

for(int y = yIndex+1;y & lt=行;y++){

Color c=isBlack?颜色.黑色:颜色.白色;

if(getChess(xIndex,y,c)!=空)

continue count++;

其他

打破;

}

if(continue count & gt;=5)

返回true

其他

continue count = 1;

//在另一种情况下继续搜索:对角线。

//寻找东北

for(int x=xIndex+1,y = yIndex-1;y & gt= 0 & amp& ampx & lt= COLSx++,y - ){

Color c=isBlack?颜色.黑色:颜色.白色;

if(getChess(x,y,c)!=null){

continue count++;

}

else break

}

//寻找西南

for(int x=xIndex-1,y = yIndex+1;x & gt= 0 & amp& ampy & lt=行;x -,y++){

Color c=isBlack?颜色.黑色:颜色.白色;

if(getChess(x,y,c)!=null){

continue count++;

}

else break

}

if(continue count & gt;=5)

返回true

否则continue count = 1;

//在另一种情况下继续搜索:对角线。

//寻找西北

for(int x=xIndex-1,y = yIndex-1;x & gt= 0 & amp& ampy & gt=0;x -,y - ){

Color c=isBlack?颜色.黑色:颜色.白色;

if(getChess(x,y,c)!=空)

continue count++;

else break

}

//寻找东南方向

for(int x=xIndex+1,y = yIndex+1;x & lt= COLS & amp& ampy & lt=行;x++,y++){

Color c=isBlack?颜色.黑色:颜色.白色;

if(getChess(x,y,c)!=空)

continue count++;

else break

}

if(continue count & gt;=5)

返回true

否则continue count = 1;

返回false

}

私有点getChess(int xIndex,int yIndex,Color color){

for(点p:chessList){

如果(p!= null & amp& ampp . getx()= xIndex & amp;& ampp.getY()==yIndex

& amp& ampp.getColor()==color)

返回p;

}

返回null

}

public void restartGame(){

//清除棋子

for(int I = 0;我& ltchess list . length;i++){

chess list[I]= null;

}

//恢复游戏相关的变量值

isBlack = true

gameOver = false//游戏结束了吗?

ches count = 0;//棋盘的当前数量

repaint();

}

//后悔棋

公共void goback(){

if(chessCount==0)

返回;

chess list[chess count-1]= null;

ches count-;

if(ches count & gt;0){

xIndex = chess list[chess count-1]。getX();

yIndex = chess list[chess count-1]。getY();

}

isBlack=!isBlack

repaint();

}

//矩形维度

公共维度getPreferredSize(){

返回新维度(MARGIN*2+GRID_SPAN*COLS,MARGIN*2

+GRID _ SPAN * ROWS);

}

}