进击的五子棋第二季

  1 package com.lovo;
  2
  3 import java.awt.BasicStroke;
  4 import java.awt.Color;
  5 import java.awt.Graphics;
  6 import java.awt.Graphics2D;
  7 import java.awt.Stroke;
  8
  9 import org.w3c.dom.css.Counter;
 10
 11 public class Board {
 12     private int currentColor;
 13     private int[][] b = new int[15][15];
 14
 15     /**
 16      * 画棋盘
 17      *
 18      * @param g
 19      */
 20     public void draw(Graphics g) {
 21         g.setColor(Color.BLACK);
 22         Graphics2D g2d = (Graphics2D) g; // 用Graphics2D可以调粗细
 23         Stroke oldsStroke = g2d.getStroke();// 保存现场
 24         g2d.setStroke(new BasicStroke(3)); // 设置画笔粗细
 25         g.drawRect(50, 50, 700, 700); // 矩形框
 26         g2d.setStroke(oldsStroke); // 回复现场
 27         for (int i = 0; i < 13; i++) {
 28             g.drawLine(50, 100 + i * 50, 750, 100 + i * 50);
 29             g.drawLine(100 + i * 50, 50, 100 + i * 50, 750);
 30         }
 31         // 画天元和三三点
 32         g.fillOval(390, 390, 20, 20);// 实心椭圆
 33         g.fillOval(195, 195, 10, 10);
 34         g.fillOval(595, 195, 10, 10);
 35         g.fillOval(595, 595, 10, 10);
 36         g.fillOval(195, 595, 10, 10);
 37         for (int i = 0; i < b.length; i++) {// 行的循环,控制纵坐标
 38             for (int j = 0; j < b[i].length; j++) {// 列的循环,控制横坐标
 39                 if (b[i][j] != 0) {
 40                     g.setColor(b[i][j] == 1 ? Color.BLACK : Color.WHITE);
 41                     g.fillOval(25 + 50 * j, 25 + 50 * i, 50, 50);
 42                 }
 43             }
 44         }
 45     }
 46     /**
 47      * 走棋
 48      * @param row 行
 49      * @param col 列
 50      * @param isBlack 是否是黑棋
 51      * @return    boolean
 52      */
 53     public boolean playChess(int row, int col, boolean isBlack) {
 54         if (b[row][col] == 0) {
 55             b[row][col] = isBlack ? 1 : 2;
 56             return true;
 57         }
 58         return false;
 59     }
 60     /**
 61      * 判断是否决出胜负
 62      * @param row 行
 63      * @param col 列
 64      * @param isBlack 是否是黑棋
 65      * @return boolean
 66      */
 67     public boolean judge(int row, int col, boolean isBlack) {
 68         currentColor = isBlack ? 1 : 2;
 69         return compareVer(row, col, currentColor) == 5 || compareHor(row, col, currentColor) == 5||
 70                 compareX1(row, col, currentColor) == 5|| compareX2(row, col, currentColor) == 5;
 71     }
 72     /**
 73      * 判断垂直方向上是否有五子相连
 74      * @param row 行
 75      * @param col 列
 76      * @param currentColor 当前棋子的颜色
 77      * @return    相连的棋子数
 78      */
 79     private int compareVer(int row,int col, int currentColor) {
 80         int counter = 1;
 81         int tempRow = row;
 82         while (tempRow - 1 >= 0 && b[tempRow - 1][col] == currentColor) {
 83             tempRow--;
 84             counter++;
 85         }
 86         tempRow = row;
 87         while (tempRow + 1 <= b.length && b[tempRow + 1][col] == currentColor) {
 88             tempRow++;
 89             counter++;
 90         }
 91         return counter;
 92     }
 93     /**
 94      * 判断水平方向上是否有五子相连
 95      * @param row 行
 96      * @param col 列
 97      * @param currentColor 当前棋子的颜色
 98      * @return    相连的棋子数
 99      */
100     private int compareHor(int row,int col, int currentColor) {
101         int counter = 1;
102         int tempCol = col;
103         while (tempCol - 1 >= 0 && b[row][tempCol - 1] == currentColor) {
104             tempCol--;
105             counter++;
106         }
107         tempCol = col;
108         while (tempCol + 1 <= b[row].length && b[row][tempCol + 1] == currentColor) {
109             tempCol++;
110             counter++;
111         }
112         return counter;
113     }
114     /**
115      * 判断对角线方向"\"上是否有五子相连
116      * @param row 行
117      * @param col 列
118      * @param currentColor 当前棋子的颜色
119      * @return    相连的棋子数
120      */
121     private int compareX1(int row,int col, int currentColor) {
122         int counter = 1;
123         int tempRow = row;
124         int tempCol = col;
125         while (tempRow - 1 >= 0 && tempCol - 1 >= 0 && b[tempRow - 1][tempCol - 1] == currentColor) {
126             tempCol--;
127             tempRow--;
128             counter++;
129         }
130         tempRow = row;
131         tempCol = col;
132         while (tempRow + 1 <= b.length && tempCol + 1 <= b.length && b[tempRow + 1][tempCol + 1] == currentColor) {
133             tempCol++;
134             tempRow++;
135             counter++;
136         }
137         return counter;
138     }
139     /**
140      * 判断对角线方向"/"上是否有五子相连
141      * @param row 行
142      * @param col 列
143      * @param currentColor 当前棋子的颜色
144      * @return    相连的棋子数
145      */
146     private int compareX2(int row,int col, int currentColor) {
147         int counter = 1;
148         int tempRow = row;
149         int tempCol = col;
150         while (tempRow - 1 >= 0 && tempCol + 1 <= b[tempRow].length && b[tempRow - 1][tempCol + 1] == currentColor) {
151             tempCol++;
152             tempRow--;
153             counter++;
154         }
155         tempRow = row;
156         tempCol = col;
157         while (tempRow + 1 <= b.length && tempCol - 1 >= 0 && b[tempRow + 1][tempCol - 1] == currentColor) {
158             tempCol--;
159             tempRow++;
160             counter++;
161         }
162         return counter;
163     }
164     // public void makeAMove() {
165     // int row = (int) (Math.random() * 15);
166     // int col = (int) (Math.random() * 15);
167     // if (b[row][col] == 0) {
168     // b[row][col] = blackTurn ? 1 : 2;//0表示没有走棋,1表示黑棋,2表示白棋
169     // blackTurn = !blackTurn; //交换走棋
170     // }
171     // }
172 }
 1 package com.lovo;
 2
 3 import java.awt.Color;
 4 import java.awt.Font;
 5 import java.awt.Graphics;
 6 import java.awt.Image;
 7 import java.awt.event.ActionEvent;
 8 import java.awt.event.ActionListener;
 9 import java.awt.event.KeyAdapter;
10 import java.awt.event.KeyEvent;
11 import java.awt.event.KeyListener;
12 import java.awt.event.MouseAdapter;
13 import java.awt.event.MouseEvent;
14 import java.awt.image.BufferedImage;
15
16 import javax.swing.JFrame;
17 import javax.swing.Timer;
18
19 public class MyFrame extends JFrame{
20     private static final long serialVersionUID = -3544738451252364271L;
21     private boolean isBlackTurn = true;
22     private Board board = new Board();
23     private boolean isContinue = true;
24     //在内存中创建一张图
25     private Image offImage = new BufferedImage(800, 800, BufferedImage.TYPE_INT_RGB);
26     public MyFrame(){
27         this.setTitle("五子棋");
28         this.setSize(800, 800);
29         this.setResizable(false);
30         this.getContentPane().setBackground(new Color(197, 194, 129));//设置窗口背景
31         this.setDefaultCloseOperation(EXIT_ON_CLOSE);
32         this.setLocationRelativeTo(null);    //窗口居中
33         this.addKeyListener(new KeyAdapter() {//添加一个键盘的监听,按F2重置游戏
34             @Override
35             public void keyPressed(KeyEvent e) {
36                 if (e.getKeyCode() == 113) {
37                     board = new Board();//新建一个棋盘
38                     isContinue =true;
39                     repaint();
40                 }
41             }
42
43         });
44         this.addMouseListener(new MouseAdapter() {//添加一个鼠标的监听
45
46             @Override
47             public void mousePressed(MouseEvent e) {
48                 int x = e.getX();
49                 int y = e.getY();
50                 if (isContinue) {//判断是否继续游戏
51                     if (x >= 50 && x <= 750 && y >=50 && y <= 750) {
52                         int row = Math.round((y - 50) / 50.0F);
53                         int col = Math.round((x - 50) / 50.0F);
54                         //走棋,返回true走棋成功,返回false走棋失败(如走棋的地方已经有棋了)
55                         if (board.playChess(row, col, isBlackTurn)) {
56                             repaint();
57                             //判断是否决出胜负
58                             if (board.judge(row, col, isBlackTurn)) {
59                                 isContinue = false;                        //游戏结束
60                             }else {
61                                 isBlackTurn = !isBlackTurn;
62                             }
63                         }
64                     }
65                 }
66
67             }
68
69         });
70     }
71
72     @Override
73     public void paint(Graphics g) {//操作系统调用该方法绘图
74         Graphics newG = offImage.getGraphics();//得到内存中图片的画笔
75         super.paint(newG);                //有才能设置背景,在内存中画出窗口
76         board.draw(newG);                //在内存中画出棋盘
77         if (!isContinue) {
78             newG.setFont(new Font("微软雅黑", Font.BOLD, 100));
79             if (isBlackTurn) {
80                 newG.setColor(new Color(62, 62, 62));
81                 newG.drawString("黑方胜利", 200, 400);
82             }else {
83                 newG.setColor(new Color(222, 222, 222));
84                 newG.drawString("白方胜利", 200, 400);
85             }
86             newG.setFont(new Font("微软雅黑", Font.BOLD, 20));
87             newG.setColor(new Color(90, 90, 255));
88             newG.drawString("按F2键重置棋盘", 300, 490);
89         }
90         g.drawImage(offImage, 0, 0, 800, 800,null);//把内存里的棋盘放到屏幕上
91     }
92 }
1 package com.lovo;
2
3 public class GameRun {
4     public static void main(String[] args) {
5         new MyFrame().setVisible(true);
6     }
7 }
时间: 2024-10-05 05:01:58

进击的五子棋第二季的相关文章

进击的五子棋第一季

RunGmae类 1 package com.lovo; 2 3 public class GameRun { 4 public static void main(String[] args) { 5 new MyFrame().setVisible(true); 6 } 7 } MyFrame类 1 package com.lovo; 2 3 import java.awt.Color; 4 import java.awt.Graphics; 5 import java.awt.Image;

《欢乐颂》第二季来袭:程序员救美,邱莹莹终于找到靠谱男

<欢乐颂>前不久刚迎来大结局,大家就马上开始期待第二季了.都市剧那么多,却独独火了它.也许这部剧成功之处就在于它真实,因为大部分人都能从剧中找到现在或是曾经的自己. 现实生活中,我们大多都是像邱莹莹这样的普通人,羡慕曲筱绡,梦想做安迪,一直像关雎尔一样拼命努力,最后发现只是比樊胜美过得好一些.很多人讨厌邱莹莹的无知和冲动,但看到最后却发现,她虽然被公司辞退,却通过自己的网购经验,误打误撞把咖啡厅的工作做的有声有色. 你以为到这里,邱莹莹迎来了完美结局,故事就要结束了吗?NONONO,有一种故事

第二季来袭:奶茶妹妹都用Lync开会了,你们一定要知道的Lync会议的秘密噢~

大家对第一季的关注促使我继续编写第二季,感觉有点像美剧,收视率高我们就继续,哈哈~~写点啥,Lync内容太多了,最近听说奶茶妹妹入职微软了都在使用Lync开会了,那我们就一起谈谈Lync会议的秘密吧! 秘密1:你可以通过视频看到奶茶妹妹噢,还可以设置为重点关注对象. 从Lync 2013开始我们可以支持高清视频了哈,用户在会议过程中视频分辨率最高能够达到1080P级别,也就是1920 x 1080的全高清分辨率噢.另外,在Lync 2013我们可以支持多路视频,可以同时展示5个发言者的视频,并可

原创:一个由计算采购平均单价引发的学案【第二季】

原创:一个由计算采购平均单价引发的学案[第二季] 背景:                    上集讲到接到朋友请求,要统计2012年每月的平均采购单价,按要求统计完,发给他之后:刚刚抽了根烟,朋友说还有2013和2014年的也要统计:问我能否把方法告诉他,考虑到sumpoduct函数用起来稍有些复杂,担心电话里说不清楚,就没有讲: 想想帮人就帮到底,干脆就帮他把2013和2014年的也直接帮他统计好了,发给了他: 启发:                    后来想到这个案例还是蛮经典的,也是

微信公众平台深度开发JAVA版第二季视频教程

微信公众平台深度开发JAVA版第二季(九宝饭店微信点餐系统)视频教程下载密码:qa4a     联系QQ:1026270010 微信作为当前流行的通信社交软件有了上亿的用户量,几乎每一个只能手机都要安装微信.但是,市场上对于JAVA开发微信公众平台的资料却少之又少,多数的资料一般是其他语言的.因此,主讲老师经过潜心研究.认真准备,录制了这套针对JAVA开发语言的微信公众平台开发教程. 1.课程研发环境 开发语言:JAVA WEBServer:TOMAT DATABASE:MySQL 开发工具:m

OpenGL小试牛刀第二季(粒子模拟)

效果截图:粒子模拟代码展示:#include "Particle.h" /** 构造函数 */CParticle::CParticle(){ data = NULL; numparticle = 0; } /** 析构函数 */CParticle::~CParticle(){ delete []data; data = NULL;} /** 创建一个包含num个元素的粒子数组 */int CParticle::Create(long num){ /** 删除粒子数组 */ if (da

OSChina 周二乱弹 —— 我容易吗我第二季

9月1日,一不小心又是新的一个月,各位OSCer大家壕.昨天是开源中国七周年生日,收到OSCer一大波的祝福,小小编一激动,又要发福利了,不过,请大家先拨打120叫好救护车再往下看: @twosnail:开源中国 7 周年纪念日 @change_solider:OSC 生日快乐! @青木河:OSC 生日快乐!希望我兰每天都快乐!希望红薯每天都自恋!希望菲姨依然热门!希望李博文继续臭不要脸! @翻墙攻城势:今天是:开源中国 7 周年纪念日 有什么用, 就是有福利啊!真空美人鱼- @小小编辑:在大角

拥抱ARM妹纸第二季 之 第一次 点亮太阳

上次做鱼缸LED灯时还有很多材料正好拿来用.穆等等哥- 俺去找材料. 材料列表     3W LED   x  3     散热片     x  1     恒流IC     x  1     其他零件  ... ... 注意哦,大功率LED那叫个热啊.一定不要忘记把这个东东绑在散热片上,否则这小家伙会把自己的脑袋给烧掉. "CPU散热器行吗" "当然,只要能散热的都行." 小穆,帮忙摆摆整齐.笑一笑,茄子---! 再来一张 哦--- 一堆乱七八糟的东西! 自己动手

一起做RGB-D SLAM 第二季 (一)

小萝卜:师兄!过年啦!是不是很无聊啊!普通人的生活就是赚钱花钱,实在是很没意思啊! 师兄:是啊…… 小萝卜:他们都不懂搞科研和码代码的乐趣呀! 师兄:可不是嘛…… 小萝卜:所以今年过年,我们再做一个SLAM吧!之前写的那个太烂了啦,我都不好意思说是我做的了! 师兄:嗯那可真是对不住你啊…… 小萝卜:没事!你再写一个好一点的,我就原谅你了!写完再请我吃饭吧! 师兄:啊,好的…… 小萝卜:师兄你别这么没精神啊!加油咯! 前言 在经过了一番激烈的思想斗争之后呢,师兄厌倦了年假的无聊生活,开始写<一起做