赞
踩
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函数用于生成可视化窗口。
- #include "acllib.h"
- #include <xpolymorphic_allocator.h>
- int winwidth = 800;
- int winheight = 580;
- int x00 = 20, y00 = 20;
- int x11 = 760, y11 = 20;
- int x22 = 20, y22 = 540;
- int x33 = 760,y33 = 540;
- void paintchessboard();
- void paintchess();
- void mouse(int x,int y,int button,int e);
- void win();
- int n = 1;
- const int maxnum = 30;
- int f[maxnum][maxnum];
- int g[maxnum][maxnum];
- /*for (int i = 0; i < maxnum; i++)
- {
- for (int j = 0; j < maxnum; j++) { f[i][j] = 0; }
- }*/
- int Setup()
- {
- initWindow("chessgame", DEFAULT, DEFAULT, winwidth, winheight);
-
- paintchessboard();
- //paintchess();
-
- registerMouseEvent(mouse);
- return 0;
-
- }
- void paintchessboard()//棋盘及格子坐标初始化
- {
- beginPaint();
- moveTo(0, 0);
- line(x00, y00, x11 , y11);
- line(x00, y00, x22, y22);
- line(x11, y11, x33, y33);
- line(x22, y22, x33, y33);
- for (int x = 20; x <= 760; x = x + 37)
- {
- line(x, y00, x, y22);
- }
- for (int y = 20; y <= 540; y = y + 26)
- {
-
-
- line(x00, y, x11, y);
- }
- endPaint();
-
- }
- void paintchess()
- {
- beginPaint();
- setBrushColor(BLACK);
- ellipse(43, 33, 71, 61);
- endPaint();//外切正方形边长18
- }
- void mouse(int x, int y, int button, int e)
- {
- if (e != BUTTON_DOWN) return;
- if (button == LEFT_BUTTON )
- {
- beginPaint();
-
- for (int i = 20; i <= 760; i = i + 37)
- {
- for (int j = 20; j <= 540; j = j + 26)
- if (x >= i - 4 && x<=i + 4 && y>=j - 4 && y <= j + 4)
- { if(n%2==1)
- setBrushColor(BLUE);
- else
- setBrushColor(BLACK);
-
- ellipse(i - 13, j - 13, i + 13, j + 13);
-
- int qx = (i - 20) / 37;
- int qy = (j - 20) / 26;
- if (n % 2 == 1)
- f[qx][qy] = 1;
- else
- g[qx][qy] = 1;
- //cout<<qx<<qy<<endl;
- /*char score1[20];
- char score2[20];
- setTextSize(50);
- sprintf_s(score1, "%d", qx);
- sprintf_s(score2, "%d", qy);
- paintText(400, 300, score1);
- paintText(500, 300, score2);*/
- win();
- n++;
- }
- }
- }
- endPaint();
-
-
- }
- void win()
- {//遍历整个棋盘
- for(int i=0;i<maxnum;i++)
- {
- for (int j = 0; j < maxnum; j++)
- {
- 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))
-
- {
- setTextSize(60);
- setTextBkColor(GREEN);
- setTextColor(RED);
- paintText(500, 460, "胜负已分");
- }
- 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))
-
- {
- setTextSize(60);
- setTextBkColor(GREEN);
- setTextColor(RED);
- paintText(500, 460, "胜负已分");
- }
-
- 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))
-
- {
- setTextSize(60);
- setTextBkColor(GREEN);
- setTextColor(RED);
- paintText(500, 460, "胜负已分");
- }//左斜
- 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))
-
- {
- setTextSize(60);
- setTextBkColor(GREEN);
- setTextColor(RED);
- paintText(500, 460, "胜负已分");
- }//右斜
-
-
- }
-
- }
-
- }
-
-
-
-
-
-
-
-

五子棋游戏基本实现,但目前只能同一台设备操作,且不存在人机对战,有待开发。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。