求助,做个java五子棋或者安卓记账app。
[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);
}
}