当前位置:   article > 正文

C++实现五子棋小游戏_c++五子棋

c++五子棋

主要思路:

1.采用acllib图形库的画图工具创建棋盘和棋子,并定义鼠标点击事件,用数组储存棋子坐标。

2.设置整型变量n=1,每次点击会使n+1,n为奇数时生成蓝棋,n为偶数时生成黑棋,从而控制实现了蓝棋走一步、黑棋走一步的游戏规则。

3.判胜的四种情况:横、竖、左斜、右斜。

游戏规则:

国际五子棋规则

光标控制,两颜色棋子的持有者一人一步。

使用函数:

void paintchessboard(); 作用是在可视化窗口生成了一个37列 27行的棋盘
void paintchess(); 画出棋子
void mouse(int x,int y,int button,int e);  监视光标点击事件
void win(); 用四个if语句判胜(横、竖、左斜、右斜。) 

Setup();  在acllib中相当于main函数,initWindow函数用于生成可视化窗口。

效果展示:

源码很简单只有100行,如下:

  1. #include "acllib.h"
  2. #include <xpolymorphic_allocator.h>
  3. int winwidth = 800;
  4. int winheight = 580;
  5. int x00 = 20, y00 = 20;
  6. int x11 = 760, y11 = 20;
  7. int x22 = 20, y22 = 540;
  8. int x33 = 760,y33 = 540;
  9. void paintchessboard();
  10. void paintchess();
  11. void mouse(int x,int y,int button,int e);
  12. void win();
  13. int n = 1;
  14. const int maxnum = 30;
  15. int f[maxnum][maxnum];
  16. int g[maxnum][maxnum];
  17. /*for (int i = 0; i < maxnum; i++)
  18. {
  19. for (int j = 0; j < maxnum; j++) { f[i][j] = 0; }
  20. }*/
  21. int Setup()
  22. {
  23. initWindow("chessgame", DEFAULT, DEFAULT, winwidth, winheight);
  24. paintchessboard();
  25. //paintchess();
  26. registerMouseEvent(mouse);
  27. return 0;
  28. }
  29. void paintchessboard()//棋盘及格子坐标初始化
  30. {
  31. beginPaint();
  32. moveTo(0, 0);
  33. line(x00, y00, x11 , y11);
  34. line(x00, y00, x22, y22);
  35. line(x11, y11, x33, y33);
  36. line(x22, y22, x33, y33);
  37. for (int x = 20; x <= 760; x = x + 37)
  38. {
  39. line(x, y00, x, y22);
  40. }
  41. for (int y = 20; y <= 540; y = y + 26)
  42. {
  43. line(x00, y, x11, y);
  44. }
  45. endPaint();
  46. }
  47. void paintchess()
  48. {
  49. beginPaint();
  50. setBrushColor(BLACK);
  51. ellipse(43, 33, 71, 61);
  52. endPaint();//外切正方形边长18
  53. }
  54. void mouse(int x, int y, int button, int e)
  55. {
  56. if (e != BUTTON_DOWN) return;
  57. if (button == LEFT_BUTTON )
  58. {
  59. beginPaint();
  60. for (int i = 20; i <= 760; i = i + 37)
  61. {
  62. for (int j = 20; j <= 540; j = j + 26)
  63. if (x >= i - 4 && x<=i + 4 && y>=j - 4 && y <= j + 4)
  64. { if(n%2==1)
  65. setBrushColor(BLUE);
  66. else
  67. setBrushColor(BLACK);
  68. ellipse(i - 13, j - 13, i + 13, j + 13);
  69. int qx = (i - 20) / 37;
  70. int qy = (j - 20) / 26;
  71. if (n % 2 == 1)
  72. f[qx][qy] = 1;
  73. else
  74. g[qx][qy] = 1;
  75. //cout<<qx<<qy<<endl;
  76. /*char score1[20];
  77. char score2[20];
  78. setTextSize(50);
  79. sprintf_s(score1, "%d", qx);
  80. sprintf_s(score2, "%d", qy);
  81. paintText(400, 300, score1);
  82. paintText(500, 300, score2);*/
  83. win();
  84. n++;
  85. }
  86. }
  87. }
  88. endPaint();
  89. }
  90. void win()
  91. {//遍历整个棋盘
  92. for(int i=0;i<maxnum;i++)
  93. {
  94. for (int j = 0; j < maxnum; j++)
  95. {
  96. if ((f[i][j] == 1 && f[i - 1][j] == 1 && f[i - 2][j] == 1 && f[i + 1][j] == 1 && f[i + 2][j] == 1)|| (g[i][j] == 1 && g[i - 1][j] == 1 && g[i - 2][j] == 1 && g[i + 1][j] == 1 && g[i + 2][j] == 1))
  97. {
  98. setTextSize(60);
  99. setTextBkColor(GREEN);
  100. setTextColor(RED);
  101. paintText(500, 460, "胜负已分");
  102. }
  103. if ((f[i][j] == 1 && f[i][j-1] == 1 && f[i][j-2] == 1 && f[i][j+1] == 1 && f[i][j+2] == 1)|| (g[i][j] == 1 && g[i][j - 1] == 1 && g[i][j - 2] == 1 && g[i][j + 1] == 1 && g[i][j + 2] == 1))
  104. {
  105. setTextSize(60);
  106. setTextBkColor(GREEN);
  107. setTextColor(RED);
  108. paintText(500, 460, "胜负已分");
  109. }
  110. if ((f[i][j] == 1 && f[i+1][j - 1] == 1 && f[i+2][j - 2] == 1 && f[i-1][j + 1] == 1 && f[i-2][j + 2] == 1) || (g[i][j] == 1 && g[i+1][j - 1] == 1 && g[i+2][j - 2] == 1 && g[i-1][j + 1] == 1 && g[i-2][j + 2] == 1))
  111. {
  112. setTextSize(60);
  113. setTextBkColor(GREEN);
  114. setTextColor(RED);
  115. paintText(500, 460, "胜负已分");
  116. }//左斜
  117. if ((f[i][j] == 1 && f[i - 1][j - 1] == 1 && f[i - 2][j - 2] == 1 && f[i + 1][j + 1] == 1 && f[i + 2][j + 2] == 1) || (g[i][j] == 1 && g[i- 1][j - 1] == 1 && g[i -2][j - 2] == 1 && g[i + 1][j + 1] == 1 && g[i + 2][j + 2] == 1))
  118. {
  119. setTextSize(60);
  120. setTextBkColor(GREEN);
  121. setTextColor(RED);
  122. paintText(500, 460, "胜负已分");
  123. }//右斜
  124. }
  125. }
  126. }

五子棋游戏基本实现,但目前只能同一台设备操作,且不存在人机对战,有待开发。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/243694
推荐阅读
相关标签
  

闽ICP备14008679号