五子棋设计笔记
程序员文章站
2022-03-24 15:27:13
...
五子棋小游戏
一、设计思路
窗体上面有三个按钮:双人模式、人机模式、重新开始
给窗体加一个背景图片
窗体上有棋盘
二、重绘棋盘
自动绘制,把图片和棋盘在paint里面进行绘制,重写了paint方法,同时我们需要记录棋子,也要加入到重绘里面
public void paint(Graphics g) {
//调用父类的paint方法
super.paint(g);
final ImageIcon bgImageIcon = new ImageIcon(ShowUI.class.getClassLoader().getResource("game/image/background.png"));
final Image image = bgImageIcon.getImage();
g.drawImage(image, 0, 0, this.getWidth(), this.getHeight(), null);
//遍历列表,绘制所有的图形
for(int i=0;i<11;i++){
g.setColor(Color.red);
g.drawLine(100+Size*i, 100, 100+Size*i, 500);
g.drawLine(100, 100+Size*i, 500, 100+Size*i);
}
for(int i=0;i<11;i++){
for(int j=0;j<11;j++){
chessboard[i][j]=0;
}
}
//遍历列表,绘制所有的图形
for(Shape s : list) {
s.show(g);
}
}
三、如何存棋子
private int x1,y1,x2,y2,number;
public Shape(int x1,int y1,int x2,int y2,int number){
this.x1=x1;
this.y1=y1;
this.x2=x2;
this.y2=y2;
this.number=number;
}
public void show(Graphics g) {
// TODO Auto-generated method stub
if(number==0){
// 绘制一个椭圆
g.drawOval(x1,y1,x2,y2);//修改左上角的坐标,使画好的圆恰好在以网格点所在的位置上
// 填充一个椭圆
g.setColor(Color.BLACK);
g.fillOval(x1,y1,x2,y2);
}else if(number==1){
// 绘制一个椭圆
g.drawOval(x1,y1,x2,y2);//修改左上角的坐标,使画好的圆恰好在以网格点所在的位置上
// 填充一个椭圆
g.setColor(Color.WHITE);
g.fillOval(x1,y1,x2,y2);
}
}
因为我们需要绘制一个圆,drawOval函数需要的四个参数为左上角坐标和长宽,所以我们需要传入这四个数,注意不是圆心,这就迫使我们需要有一点偏移。同时number让我们可以判断是黑子还是白子
List<Shape> list=new ArrayList<>();
用这个列表来存储。
四、弹出框
public void showResult2(String s){
String show=s;
Object[] result={"确定"};
int k=JOptionPane.showOptionDialog(null,show,"",JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.QUESTION_MESSAGE,null,result,result[0]);
if(k==0){
choose++;
}
else if(k==1){
choose-=2;
}
}点击确定得到一个k=0,点击关闭的X返回一个k=1
五、如何人机
选择最优的,经行博弈
上一篇: 2019年要不要学php