在路上

 找回密码
 立即注册
在路上 站点首页 学习 查看内容

java实现单人版五子棋游戏

2016-8-29 13:12| 发布者: zhangjf| 查看: 647| 评论: 0

摘要: 本文实例讲述了java实现的五子棋游戏代码,分享给大家供大家参考,具体代码如下 package gyb.exam; import java.awt.BorderLayout;import java.awt.Color;import java.awt.Dimension;import java.awt.Font;import ja ...

本文实例讲述了java实现的五子棋游戏代码,分享给大家供大家参考,具体代码如下

  1. package gyb.exam;
  2. import java.awt.BorderLayout;
  3. import java.awt.Color;
  4. import java.awt.Dimension;
  5. import java.awt.Font;
  6. import java.awt.Graphics;
  7. import java.awt.Point;
  8. import java.awt.Toolkit;
  9. import java.awt.event.ActionEvent;
  10. import java.awt.event.ActionListener;
  11. import java.awt.event.MouseAdapter;
  12. import java.awt.event.MouseEvent;
  13. import java.util.ArrayList;
  14. import javax.swing.Icon;
  15. import javax.swing.ImageIcon;
  16. import javax.swing.JButton;
  17. import javax.swing.JFrame;
  18. import javax.swing.JLabel;
  19. import javax.swing.JMenu;
  20. import javax.swing.JMenuBar;
  21. import javax.swing.JMenuItem;
  22. import javax.swing.JOptionPane;
  23. import javax.swing.JPanel;
  24. import javax.swing.border.TitledBorder;
  25. public class MainFrame extends JFrame{
  26. private static int BIG=15;
  27. private static final int ONE=25;
  28. private static final int START=10;
  29. private static int X=BIG*START/2;
  30. private static int Y=BIG*START/2;
  31. private int HL=BIG*ONE+START;
  32. private static boolean isBlack;
  33. CanvasFrame canvas=new CanvasFrame();
  34. CanvasFrame can;
  35. Graphics g;
  36. public MainFrame(){
  37. init();
  38. }
  39. private Point point;
  40. private ArrayList<Point> blacklist=new ArrayList<Point>();
  41. private ArrayList<Point> whitelist=new ArrayList<Point>();
  42. private void init() {
  43. JMenuBar bar=new JMenuBar();
  44. setJMenuBar(bar);
  45. setSize(600,600);
  46. setTitle("五子棋");
  47. JMenu menu=new JMenu("game");
  48. bar.add(menu);
  49. JMenuItem start=new JMenuItem("start");
  50. JMenuItem end=new JMenuItem("棋盘大小");
  51. end.addActionListener(new ActionListener() {
  52. public void actionPerformed(ActionEvent e) {
  53. }
  54. });
  55. JMenuItem renew=new JMenuItem("重新开始");
  56. JMenuItem exit=new JMenuItem("退出");
  57. exit.addActionListener(new ActionListener(){
  58. public void actionPerformed(ActionEvent e) {
  59. System.exit(0);
  60. }
  61. });
  62. renew.addActionListener(new ActionListener(){
  63. public void actionPerformed(ActionEvent e) {
  64. blacklist.clear();
  65. whitelist.clear();
  66. }
  67. });
  68. menu.add(start);
  69. menu.add(renew);
  70. menu.add(end);
  71. menu.add(exit);
  72. setLayout(new BorderLayout());
  73. add(BorderLayout.CENTER,createCenter());
  74. add(BorderLayout.EAST,createEast());
  75. }
  76. private boolean isWin(ArrayList<Point> list){
  77. int x;
  78. int y;
  79. int idx=0;
  80. loop:for (Point p : list) {
  81. x=p.x;
  82. y=p.y;
  83. idx=0;
  84. while(list.contains(new Point(x,y))){
  85. idx++;
  86. x=x-ONE;
  87. if(idx==5)
  88. break loop;
  89. }
  90. x=p.x;
  91. y=p.y;
  92. idx=0;
  93. while(list.contains(new Point(x,y))){
  94. idx++;
  95. y=y-ONE;
  96. if(idx==5)
  97. break loop;
  98. }
  99. x=p.x;
  100. y=p.y;
  101. idx=0;
  102. while(list.contains(new Point(x,y))){
  103. idx++;
  104. x=x-ONE;
  105. y=y-ONE;
  106. if(idx==5)
  107. break loop;
  108. }
  109. x=p.x;
  110. y=p.y;
  111. idx=0;
  112. while(list.contains(new Point(x,y))){
  113. idx++;
  114. x=x-ONE;
  115. y=y+ONE;
  116. if(idx==5)
  117. break loop;
  118. }
  119. }
  120. return idx==5;
  121. }
  122. private JPanel createEast() {
  123. JPanel pane=new JPanel();
  124. BorderLayout border=new BorderLayout();
  125. pane.setLayout(border);
  126. pane.setBorder(new TitledBorder("五子棋"));
  127. Icon image=new ImageIcon(getClass().getResource("mm.png"));
  128. pane.add(BorderLayout.NORTH,new JLabel(image,JLabel.CENTER));
  129. pane.add(BorderLayout.CENTER,ballColor());
  130. pane.add(BorderLayout.SOUTH,button());
  131. return pane;
  132. }
  133. private JPanel ballColor() {
  134. JPanel pane=new JPanel();
  135. pane.setLayout(new BorderLayout());
  136. can=new CanvasFrame(){
  137. public void paint(Graphics g){
  138. g.setColor(Color.PINK);
  139. g.fillRect(1, 1,200,300);
  140. g.setFont(new Font("sans",Font.BOLD,20));
  141. g.setColor(Color.BLACK);
  142. g.fillOval(55, 20,25,30);
  143. g.drawString("黑子", 10, 43);
  144. g.setColor(Color.WHITE);
  145. g.fillOval(55, 60,25,30);
  146. g.drawString("白子", 10, 83);
  147. if(isBlack){
  148. g.setColor(Color.BLACK);
  149. g.drawString("黑方落子", 5, 120);
  150. }else{
  151. g.setColor(Color.WHITE);
  152. g.drawString("白方落子",5,120);
  153. }
  154. can.repaint();
  155. }
  156. };
  157. pane.add(BorderLayout.CENTER,can);
  158. return pane;
  159. }
  160. private JPanel button() {
  161. JPanel pane=new JPanel();
  162. BorderLayout bor=new BorderLayout();
  163. JButton start=new JButton("开始");
  164. JButton end=new JButton("结束");
  165. end.addActionListener(new ActionListener(){
  166. public void actionPerformed(ActionEvent e) {
  167. System.exit(0);
  168. }});
  169. pane.setLayout(bor);
  170. bor.setVgap(5);
  171. pane.setBorder(new TitledBorder(""));
  172. pane.add(BorderLayout.NORTH,start);
  173. pane.add(BorderLayout.SOUTH,end);
  174. return pane;
  175. }
  176. private JPanel createCenter() {
  177. JPanel pane=new JPanel();
  178. canvas.setPreferredSize(new Dimension(HL+10,HL+10));
  179. canvas.addMouseListener(new MouseAdapter() {
  180. public void mouseClicked(MouseEvent e){
  181. loop:if(e.getButton()==MouseEvent.BUTTON1){
  182. X=e.getX();
  183. Y=e.getY();
  184. int x=(X/ONE)*ONE;
  185. int y=(Y/ONE)*ONE;
  186. point=new Point(x,y);
  187. if(!(blacklist.contains(point)||whitelist.contains(point))){
  188. if(isBlack){
  189. blacklist.add(point);
  190. if(isWin(blacklist)){
  191. JOptionPane.showMessageDialog(null, "黑方胜利!");
  192. blacklist.clear();
  193. whitelist.clear();
  194. }
  195. }else{
  196. whitelist.add(point);
  197. if(isWin(whitelist)){
  198. JOptionPane.showMessageDialog(null, "白方胜利!");
  199. blacklist.clear();
  200. whitelist.clear();
  201. }
  202. }
  203. }
  204. else{
  205. JOptionPane.showMessageDialog(null, "这里己有子了,换个地方落子吧!");
  206. break loop;
  207. }
  208. canvas.repaint();
  209. isBlack=!isBlack;
  210. }
  211. }
  212. });
  213. pane.add(canvas);
  214. return pane;
  215. }
  216. public static void main(String[] args) {
  217. MainFrame frame=new MainFrame();
  218. frame.center(frame);
  219. frame.pack();
  220. frame.setVisible(true);
  221. }
  222. public void center(JFrame frame){
  223. //Toolkit 是当前 绘图系统集合工具包
  224. Toolkit toolkit=Toolkit.getDefaultToolkit();
  225. Dimension screen=toolkit.getScreenSize();//屏幕的宽高
  226. int frameWidth=frame.getWidth();
  227. int frameHigh=frame.getHeight();
  228. int x=(screen.width-frameWidth)/2;
  229. int y=(screen.height-frameHigh)/2;
  230. frame.setLocation(x, y);
  231. }
  232. class CanvasFrame extends JPanel {
  233. public void paint(Graphics g){
  234. g.setColor(Color.PINK);
  235. g.fillRect(0, 0, HL+20, HL+20);
  236. g.setColor(Color.BLACK);
  237. for(int i=START;i<=HL;i=i+ONE){
  238. for(int j=START;j<=HL;j=j+ONE){
  239. g.drawLine(i, j, HL, j);
  240. }
  241. }
  242. for(int i=START;i<=HL;i=i+ONE){
  243. for(int j=START;j<=HL;j=j+ONE){
  244. g.drawLine(i, j, i, HL);
  245. }
  246. }
  247. g.setColor(Color.YELLOW);
  248. g.drawRect(START/2, START/2, HL+1, HL+1);
  249. g.setColor(Color.BLACK);
  250. for(Point point : blacklist){
  251. g.fillOval(point.x, point.y, 20, 25);
  252. }
  253. g.setColor(Color.WHITE);
  254. for(Point point : whitelist){
  255. g.fillOval(point.x, point.y, 20, 25);
  256. }
  257. }
  258. }
  259. }
复制代码

效果图:

以上所述就是本文的全部内容了,希望能够对大家熟练掌握java有所帮助。

最新评论

小黑屋|在路上 ( 蜀ICP备15035742号-1 

;

GMT+8, 2025-7-7 18:49

Copyright 2015-2025 djqfx

返回顶部