程序名称:井字棋

 编译环境:Mictosoft Visual Studio 2019, EasyX_2021

作  者:代码骑士<1696297834@qq.com>

最后修改:2021-11-19

目录

游戏示例:

第一步:二维数组定义棋盘。

第二步:绘制棋盘(添加线条和白色背景方块)。

第三步:绘制开始界面。

第四步:设计有戏开始函数。

第五步:用gameshow函数实现游戏中每一帧的绘制。

第六步:编写单人模式玩家下完棋后的自动更新函数

第七步:给电脑编写函数,实现电脑的随机下棋,围堵玩家,赢棋和解局。

第八步:设计判断输赢函数。

第九步:游戏结束。

第十步:主函数实现两种模式的转换与重复游戏。


游戏示例:

第一步:二维数组定义棋盘。

har map[3][4] = {"www","www","www",
};

第二步:绘制棋盘(添加线条和白色背景方块)。

void draw()//绘制棋局函数 只适用于gamebegin()函数-----------目前适用于检测各种结点
{cleardevice();initgraph(600, 600);setbkcolor(RGB(250, 250, 250));//蓝红黄cleardevice();setlinecolor(RED);for (int i = 0; i < 3; i++){for (int j = 0; j < 3; j++){if (map[i][j] == 'w'){rectangle(j * 200, i * 200, (j + 1) * 200, (i + 1) * 200);}}}
}

第三步:绘制开始界面。

void huizhijiemian()//绘制界面函数,只应用于gamebegin函数内
{BeginBatchDraw();int x1, x2, y1, y2, y3, y4;//用来绘制界面的线框坐标int wid = 50;//线框宽度int len = 200;//线框长度x1 = 200; x2 = x1 + len;y1 = 250; y2 = y1 + wid;y3 = y1 + wid + 50; y4 = y3 + wid;setlinecolor(RED);rectangle(x1, y1, x2, y2);rectangle(x1, y2, x2, y3);rectangle(x1, y3, x2, y4);setbkmode(TRANSPARENT);//显示透明文字settextcolor(RED);settextstyle(70, 0, _T("隶书"));outtextxy(W / 2 - 100, 100, "井 字 棋");settextstyle(30, 0, _T("隶书"));outtextxy(x1 + 30, y1 + 5, "单人模式");settextstyle(30, 0, _T("隶书"));outtextxy(x1 + 30, y2 + 5, "双人模式");settextstyle(30, 0, _T("隶书"));outtextxy(x1 + 30, y3 + 5, "退出游戏");FlushBatchDraw();EndBatchDraw();
}

第四步:设计有戏开始函数。

void gamebegin()     // 游戏开始
{w = 0;q = 1;k = 0;if (w == 0){int exit = 0;//循环出口int x1, x2, y1, y2, y3, y4;int wid = 50;//线框宽度int len = 200;//线框长度x1 = 200; x2 = x1 + len;y1 = 250; y2 = y1 + wid;y3 = y1 + wid + 50; y4 = y3 + wid;initgraph(600, 600);setfillcolor(GREEN);//鼠标点击颜色setbkcolor(RGB(250, 250, 250));//蓝红黄cleardevice();while (exit != 1){huizhijiemian();//绘制界面函数// 获取一条鼠标消息ExMessage m;//定义一个消息变量m = getmessage(EM_MOUSE);//获取鼠标消息switch (m.message){case WM_MOUSEMOVE:break;case WM_LBUTTONDOWN://点击左键if (m.x >= x1 && m.x <= x2 && m.y >= y1 && m.y <= y2){//单人模式fillcircle(m.x, m.y, 10);Sleep(1);mood = 1;//单人模式exit = 1;//退出循环结束此函数closegraph();}else if (m.x >= x1 && m.x <= x2 && m.y >= y2 && m.y <= y3){//双人模式fillcircle(m.x, m.y, 10);Sleep(1);mood = 2;//双人模式exit = 1;//退出循环结束此函数closegraph();}else if (m.x >= x1 && m.x <= x2 && m.y >= y3 && m.y <= y4){fillcircle(m.x, m.y, 10);closegraph();break;}else {int step = 20;setlinestyle(PS_SOLID, 20);//设置线条宽度setlinecolor(RED);line(m.x - step, m.y - step, m.x + step, m.y + step);line(m.x + step, m.y - step, m.x - step, m.y + step);setlinestyle(PS_SOLID, 0);//还原线条宽度}break;case WM_RBUTTONUP:// 按鼠标右键退出程序setlinestyle(PS_SOLID, 20);//设置线条宽度setlinecolor(BLUE);circle(m.x, m.y, 20);setlinestyle(PS_SOLID, 0);//还原线条宽度break;}}draw();//展开新棋局

第五步:用gameshow函数实现游戏中每一帧的绘制。

void gameshow()  // 显示
{cleardevice();setlinecolor(RED);int i, j;for (int i = 0; i < 3; i++){for (int j = 0; j < 3; j++){if (map[i][j] == 'w'){rectangle(j * 200, i * 200, (j + 1) * 200, (i + 1) * 200);}if (map[i][j] == 'a'){rectangle(j * 200, i * 200, (j + 1) * 200, (i + 1) * 200);setlinestyle(PS_SOLID, 20);//设置线条宽度setlinecolor(BLUE);circle((j * 200 + (j + 1) * 200) / 2, (i * 200 + (i + 1) * 200) / 2, 50);//在格子中心点画圆setlinestyle(PS_SOLID, 0);//还原线条宽度}if (map[i][j] == 'b'){rectangle(j * 200, i * 200, (j + 1) * 200, (i + 1) * 200);setlinestyle(PS_SOLID, 20);//设置线条宽度setlinecolor(RED);line((j * 200 + (j + 1) * 200) / 2 - 50, (i * 200 + (i + 1) * 200) / 2 - 50, (j * 200 + (j + 1) * 200) / 2 + 50, (i * 200 + (i + 1) * 200) / 2 + 50);line((j * 200 + (j + 1) * 200) / 2 + 50, (i * 200 + (i + 1) * 200) / 2 - 50, (j * 200 + (j + 1) * 200) / 2 - 50, (i * 200 + (i + 1) * 200) / 2 + 50);setlinestyle(PS_SOLID, 0);//还原线条宽度}if (map[0][0] != 'w' && map[0][1] != 'w' && map[0][2] != 'w' &&map[1][0] != 'w' && map[1][1] != 'w' && map[1][2] != 'w' &&map[2][0] != 'w' && map[2][1] != 'w' && map[2][2] != 'w'){q = 0;}}}FlushBatchDraw();
}

第六步:编写单人模式玩家下完棋后的自动更新函数

void updatenotautomation_1() 

(下面是双人模式下的输入后的更新函数)

void updatenotautomation_2()

第七步:给电脑编写函数,实现电脑的随机下棋,围堵玩家,赢棋和解局。

void Artificial_Intelligence()

第八步:设计判断输赢函数。

第九步:游戏结束。

void gameover()      //游戏结束
{closegraph();
}

第十步:主函数实现两种模式的转换与重复游戏。

int main() // 主函数
{gamebegin();   // 初始化if (mood == 1)//单人模式+++++++{while (true)       // 一直循环{gamebegin_1();    // 二次初始化if (mood == 1){while (1){updateautomation(); // 与输入无关的更新(单双人都可目前的功能只负责判断胜负)if (w == 1) { Sleep(2000); break; }gameshow();  // 显示(单双人都可)if (q == 0) { wordwin(); break; }updatenotautomation_1();    // 与输入有关的更新_1代表单人模式Artificial_Intelligence();//人工智能函数——让ai与自己对弈,实现b堵截功能}}if (mood == 2){while (1){updateautomation(); // 与输入无关的更新(单双人都可目前的功能只负责判断胜负)if (w == 1) { Sleep(2000); break; }gameshow();  // 显示(单双人都可)if (q == 0) { Sleep(1000); break; }updatenotautomation_2();    // 与输入有关的更新_2代表双人}}}}else if (mood == 2)//双人模式++++++++{while (true)       // 一直循环{gamebegin_1();    // 二次初始化if (mood == 2){while (1){updateautomation(); // 与输入无关的更新(单双人都可目前的功能只负责判断胜负)if (w == 1) { Sleep(2000); break; }gameshow();  // 显示(单双人都可)if (q == 0) { Sleep(1000); break; }updatenotautomation_2();    // 与输入有关的更新_2代表双人}}if (mood == 1){while (1){updateautomation(); // 与输入无关的更新(单双人都可目前的功能只负责判断胜负)if (w == 1) { Sleep(2000); break; }gameshow();  // 显示(单双人都可)if (q == 0) { wordwin(); break; }updatenotautomation_1();    // 与输入有关的更新_1代表单人模式Artificial_Intelligence();//人工智能函数——让ai与自己对弈,实现b堵截功能}}}}gameover();return 0;
}
#include<graphics.h>
#include<conio.h>
#include<iostream>
#define W 500
#define H 600
using namespace std;//一些全局变量
MOUSEMSG m;     // 定义鼠标消息
IMAGE hand;     //鼠标图案
int k = 0;     //控制一步一棋子//k = 0,a; // k = 1,b;
int mood = 0;   //mood = 1:单人模式;mood = 2:双人模式;
int w = 0;//判断胜负
int c = 0;//计算a下的次数
int wina = 0;// = 1:a赢了
int winb = 0; // = 2:b赢了
int winc = 0; // = 3: 平局
int v = 0;//堵截成功v = 1
int n = 0;//b胜利了n = 1
int g = 0;
int q = 1;//q = 0,则武器可下void wordwin();
void wordawin();
void wordbwin();char map[3][4] = {"www","www","www",
};void draw()//绘制棋局函数 只适用于gamebegin()函数-----------目前适用于检测各种结点
{cleardevice();initgraph(600, 600);setbkcolor(RGB(250, 250, 250));//蓝红黄cleardevice();setlinecolor(RED);for (int i = 0; i < 3; i++){for (int j = 0; j < 3; j++){if (map[i][j] == 'w'){rectangle(j * 200, i * 200, (j + 1) * 200, (i + 1) * 200);}}}
}void huizhijiemian()//绘制界面函数,只应用于gamebegin函数内
{BeginBatchDraw();int x1, x2, y1, y2, y3, y4;//用来绘制界面的线框坐标int wid = 50;//线框宽度int len = 200;//线框长度x1 = 200; x2 = x1 + len;y1 = 250; y2 = y1 + wid;y3 = y1 + wid + 50; y4 = y3 + wid;setlinecolor(RED);rectangle(x1, y1, x2, y2);rectangle(x1, y2, x2, y3);rectangle(x1, y3, x2, y4);setbkmode(TRANSPARENT);//显示透明文字settextcolor(RED);settextstyle(70, 0, _T("隶书"));outtextxy(W / 2 - 100, 100, "井 字 棋");settextstyle(30, 0, _T("隶书"));outtextxy(x1 + 30, y1 + 5, "单人模式");settextstyle(30, 0, _T("隶书"));outtextxy(x1 + 30, y2 + 5, "双人模式");settextstyle(30, 0, _T("隶书"));outtextxy(x1 + 30, y3 + 5, "退出游戏");FlushBatchDraw();EndBatchDraw();
}
void huizhijiemian_1()//二次绘制界面函数,只应用于gamebegin函数内
{BeginBatchDraw();int x1, x2, y1, y2, y3, y4;//用来绘制界面的线框坐标int wid = 50;//线框宽度int len = 200;//线框长度x1 = 200; x2 = x1 + len;y1 = 250; y2 = y1 + wid;y3 = y1 + wid + 50; y4 = y3 + wid;setlinecolor(RED);rectangle(x1, y1, x2, y2);rectangle(x1, y2, x2, y3);rectangle(x1, y3, x2, y4);setbkmode(TRANSPARENT);//显示透明文字settextcolor(BLUE);settextstyle(50, 0, _T("隶书"));outtextxy(W / 2 - 100, 100, "欢迎来玩井字棋");outtextxy(W / 2 - 100, 150, "请在次确认模式");settextstyle(30, 0, _T("隶书"));outtextxy(x1 + 30, y1 + 5, "单人模式");settextstyle(30, 0, _T("隶书"));outtextxy(x1 + 30, y2 + 5, "双人模式");settextstyle(30, 0, _T("隶书"));outtextxy(x1 + 30, y3 + 5, "退出游戏");FlushBatchDraw();EndBatchDraw();
}
void gamebegin()    // 游戏开始
{w = 0;q = 1;k = 0;if (w == 0){int exit = 0;//循环出口int x1, x2, y1, y2, y3, y4;int wid = 50;//线框宽度int len = 200;//线框长度x1 = 200; x2 = x1 + len;y1 = 250; y2 = y1 + wid;y3 = y1 + wid + 50; y4 = y3 + wid;initgraph(600, 600);setfillcolor(GREEN);//鼠标点击颜色setbkcolor(RGB(250, 250, 250));//蓝红黄cleardevice();while (exit != 1){huizhijiemian();//绘制界面函数// 获取一条鼠标消息ExMessage m;//定义一个消息变量m = getmessage(EM_MOUSE);//获取鼠标消息switch (m.message){case WM_MOUSEMOVE:break;case WM_LBUTTONDOWN://点击左键if (m.x >= x1 && m.x <= x2 && m.y >= y1 && m.y <= y2){//单人模式fillcircle(m.x, m.y, 10);Sleep(1);mood = 1;//单人模式exit = 1;//退出循环结束此函数closegraph();}else if (m.x >= x1 && m.x <= x2 && m.y >= y2 && m.y <= y3){//双人模式fillcircle(m.x, m.y, 10);Sleep(1);mood = 2;//双人模式exit = 1;//退出循环结束此函数closegraph();}else if (m.x >= x1 && m.x <= x2 && m.y >= y3 && m.y <= y4){fillcircle(m.x, m.y, 10);closegraph();break;}else {int step = 20;setlinestyle(PS_SOLID, 20);//设置线条宽度setlinecolor(RED);line(m.x - step, m.y - step, m.x + step, m.y + step);line(m.x + step, m.y - step, m.x - step, m.y + step);setlinestyle(PS_SOLID, 0);//还原线条宽度}break;case WM_RBUTTONUP:// 按鼠标右键退出程序setlinestyle(PS_SOLID, 20);//设置线条宽度setlinecolor(BLUE);circle(m.x, m.y, 20);setlinestyle(PS_SOLID, 0);//还原线条宽度break;}}draw();//展开新棋局}BeginBatchDraw();//开始第二次批量绘制
}
void gamebegin_1()      // 二次游戏开始界面
{//所有全局变量全都重新初始化k = 0;     //控制一步一棋子//k = 0,a; // k = 1,b;mood = 0;   //mood = 1:单人模式;mood = 2:双人模式;w = 0;//判断胜负c = 0;//计算a下的次数wina = 0;// = 1:a赢了winb = 0; // = 2:b赢了winc = 0; // = 3: 平局v = 0;//堵截成功v = 1n = 0;//b胜利了n = 1g = 0;q = 1;//q = 0,则武器可下if (w == 0){int exit = 0;//循环出口int x1, x2, y1, y2, y3, y4;int wid = 50;//线框宽度int len = 200;//线框长度x1 = 200; x2 = x1 + len;y1 = 250; y2 = y1 + wid;y3 = y1 + wid + 50; y4 = y3 + wid;initgraph(600, 600);setfillcolor(GREEN);//鼠标点击颜色setbkcolor(RGB(250, 250, 250));//蓝红黄cleardevice();while (exit != 1){huizhijiemian_1();//二次绘制界面函数// 获取一条鼠标消息ExMessage m;//定义一个消息变量m = getmessage(EM_MOUSE);//获取鼠标消息switch (m.message){case WM_MOUSEMOVE:break;case WM_LBUTTONDOWN://点击左键if (m.x >= x1 && m.x <= x2 && m.y >= y1 && m.y <= y2){//单人模式fillcircle(m.x, m.y, 10);Sleep(1);mood = 1;//单人模式exit = 1;//退出循环结束此函数closegraph();}else if (m.x >= x1 && m.x <= x2 && m.y >= y2 && m.y <= y3){//双人模式fillcircle(m.x, m.y, 10);Sleep(1);mood = 2;//双人模式exit = 1;//退出循环结束此函数closegraph();}else if (m.x >= x1 && m.x <= x2 && m.y >= y3 && m.y <= y4){fillcircle(m.x, m.y, 10);closegraph();break;}else {int step = 20;setlinestyle(PS_SOLID, 20);//设置线条宽度setlinecolor(RED);line(m.x - step, m.y - step, m.x + step, m.y + step);line(m.x + step, m.y - step, m.x - step, m.y + step);setlinestyle(PS_SOLID, 0);//还原线条宽度}break;case WM_RBUTTONUP:// 按鼠标右键退出程序setlinestyle(PS_SOLID, 20);//设置线条宽度setlinecolor(BLUE);circle(m.x, m.y, 20);setlinestyle(PS_SOLID, 0);//还原线条宽度break;}}//重开一局map[0][0] = 'w';map[0][1] = 'w';map[0][2] = 'w';map[1][0] = 'w';map[1][1] = 'w';map[1][2] = 'w';map[2][0] = 'w';map[2][1] = 'w';map[2][2] = 'w';draw();}BeginBatchDraw();//开始第二次批量绘制
}
void gameshow() // 显示
{cleardevice();setlinecolor(RED);int i, j;for (int i = 0; i < 3; i++){for (int j = 0; j < 3; j++){if (map[i][j] == 'w'){rectangle(j * 200, i * 200, (j + 1) * 200, (i + 1) * 200);}if (map[i][j] == 'a'){rectangle(j * 200, i * 200, (j + 1) * 200, (i + 1) * 200);setlinestyle(PS_SOLID, 20);//设置线条宽度setlinecolor(BLUE);circle((j * 200 + (j + 1) * 200) / 2, (i * 200 + (i + 1) * 200) / 2, 50);//在格子中心点画圆setlinestyle(PS_SOLID, 0);//还原线条宽度}if (map[i][j] == 'b'){rectangle(j * 200, i * 200, (j + 1) * 200, (i + 1) * 200);setlinestyle(PS_SOLID, 20);//设置线条宽度setlinecolor(RED);line((j * 200 + (j + 1) * 200) / 2 - 50, (i * 200 + (i + 1) * 200) / 2 - 50, (j * 200 + (j + 1) * 200) / 2 + 50, (i * 200 + (i + 1) * 200) / 2 + 50);line((j * 200 + (j + 1) * 200) / 2 + 50, (i * 200 + (i + 1) * 200) / 2 - 50, (j * 200 + (j + 1) * 200) / 2 - 50, (i * 200 + (i + 1) * 200) / 2 + 50);setlinestyle(PS_SOLID, 0);//还原线条宽度}if (map[0][0] != 'w' && map[0][1] != 'w' && map[0][2] != 'w' &&map[1][0] != 'w' && map[1][1] != 'w' && map[1][2] != 'w' &&map[2][0] != 'w' && map[2][1] != 'w' && map[2][2] != 'w'){q = 0;}}}FlushBatchDraw();
}void updatenotautomation_1()       // 单人模式下的手动的更新
{int exit = 0;cleardevice();while (exit != 1){// 获取一条鼠标消息ExMessage m = getmessage(EM_MOUSE);cleardevice();switch (m.message){case WM_LBUTTONDOWN://点击左键下棋将w变成aif (k == 0)//k = 0,轮到a下{if (m.y < 200 && m.y>0)//在第一排{if (m.x > 0 && m.x < 200 && map[0][0] == 'w')//在第1个格子{map[0][0] = 'a';exit = 1;//退出循环}else if (m.x > 200 && m.x < 400 && map[0][1] == 'w')//在第2个格子{map[0][1] = 'a';if (c == 2)g = 1;exit = 1;//退出循环}else if (m.x > 400 && m.x < 600 && map[0][2] == 'w')//在第3个格子{map[0][2] = 'a';exit = 1;//退出循环}}else if (m.y < 400 && m.y>200)//在第一排{if (m.x > 0 && m.x < 200 && map[1][0] == 'w')//在第4个格子{map[1][0] = 'a';if (c == 2)g = 1;exit = 1;//退出循环}else if (m.x > 200 && m.x < 400 && map[1][1] == 'w')//在第5个格子{map[1][1] = 'a';if (c == 2)g = 1;exit = 1;//退出循环}else if (m.x > 400 && m.x < 600 && map[1][2] == 'w')//在第6个格子{map[1][2] = 'a';exit = 1;//退出循环}}else if (m.y < 600 && m.y>400)//在第3排{if (m.x > 0 && m.x < 200 && map[2][0] == 'w')//在第7个格子{map[2][0] = 'a';exit = 1;//退出循环}else if (m.x > 200 && m.x < 400 && map[2][1] == 'w')//在第8个格子{map[2][1] = 'a';if (c == 2)g = 1;exit = 1;//退出循环}else if (m.x > 400 && m.x < 600 && map[2][2] == 'w')//在第9个格子{map[2][2] = 'a';exit = 1;//退出循环}}k = 1;//令k = 1,轮到b下。c++;//a下一次count++}}}k = 1;//方便重复玩
}
void AIbuding(int r)//随机情况
{if (r == 1 && map[0][0] == 'w') {map[0][0] = 'b';}else if (r == 2 && map[0][1] == 'w') {map[0][1] = 'b';}else if (r == 3 && map[0][2] == 'w') {map[0][2] = 'b';}else if (r == 4 && map[1][0] == 'w') {map[1][0] = 'b';}else if (r == 5 && map[1][1] == 'w') {map[1][1] = 'b';}else if (r == 6 && map[1][2] == 'w') {map[1][2] = 'b';}else if (r == 7 && map[2][0] == 'w') {map[2][0] = 'b';}else if (r == 8 && map[2][1] == 'w') {map[2][1] = 'b';}else if (r == 9 && map[2][2] == 'w') {map[2][2] = 'b';}
}
void AIbuding_2()//所有围堵情况
{if (map[0][0] == 'w' && map[0][1] == 'a' && map[0][2] == 'a' ||map[0][0] == 'w' && map[1][1] == 'a' && map[2][2] == 'a' ||map[0][0] == 'w' && map[1][0] == 'a' && map[2][0] == 'a'){map[0][0] = 'b';v = 1;}else if (map[0][1] == 'w' && map[0][0] == 'a' && map[0][2] == 'a' ||map[0][1] == 'w' && map[1][1] == 'a' && map[2][1] == 'a'){map[0][1] = 'b';v = 1;}else if (map[0][2] == 'w' && map[0][0] == 'a' && map[0][1] == 'a' ||map[0][2] == 'w' && map[1][1] == 'a' && map[2][0] == 'a' ||map[0][2] == 'w' && map[1][2] == 'a' && map[2][2] == 'a'){map[0][2] = 'b';v = 1;}else if (map[1][0] == 'w' && map[0][0] == 'a' && map[2][0] == 'a' ||map[1][0] == 'w' && map[1][1] == 'a' && map[1][2] == 'a'){map[1][0] = 'b';v = 1;}else if (map[1][1] == 'w' && map[1][0] == 'a' && map[1][2] == 'a' ||map[1][1] == 'w' && map[0][1] == 'a' && map[2][1] == 'a' ||map[1][1] == 'w' && map[0][0] == 'a' && map[2][2] == 'a' ||map[1][1] == 'w' && map[0][2] == 'a' && map[2][0] == 'a'){map[1][1] = 'b';v = 1;}else if (map[1][2] == 'w' && map[0][2] == 'a' && map[2][2] == 'a' ||map[1][2] == 'w' && map[1][0] == 'a' && map[1][1] == 'a'){map[1][2] = 'b';v = 1;}else if (map[2][0] == 'w' && map[0][0] == 'a' && map[1][0] == 'a' ||map[2][0] == 'w' && map[1][1] == 'a' && map[0][2] == 'a' ||map[2][0] == 'w' && map[2][1] == 'a' && map[2][2] == 'a'){map[2][0] = 'b';v = 1;}else if (map[2][1] == 'w' && map[2][0] == 'a' && map[2][2] == 'a' ||map[2][1] == 'w' && map[1][1] == 'a' && map[0][1] == 'a'){map[2][1] = 'b';v = 1;}else if (map[2][2] == 'w' && map[2][0] == 'a' && map[2][1] == 'a' ||map[2][2] == 'w' && map[0][2] == 'a' && map[1][2] == 'a' ||map[2][2] == 'w' && map[0][0] == 'a' && map[1][1] == 'a'){map[2][2] = 'b';v = 1;}
}
void AIbuding_3()//必胜
{if (map[0][0] == 'w' && map[0][1] == 'b' && map[0][2] == 'b' ||map[0][0] == 'w' && map[1][1] == 'b' && map[2][2] == 'b' ||map[0][0] == 'w' && map[1][0] == 'b' && map[2][0] == 'b'){map[0][0] = 'b';n = 1;}else if (map[0][1] == 'w' && map[0][0] == 'b' && map[0][2] == 'b' ||map[0][1] == 'w' && map[1][1] == 'b' && map[2][1] == 'b'){map[0][1] = 'b';n = 1;}else if (map[0][2] == 'w' && map[0][0] == 'b' && map[0][1] == 'b' ||map[0][2] == 'w' && map[1][1] == 'b' && map[2][0] == 'b' ||map[0][2] == 'w' && map[1][2] == 'b' && map[2][2] == 'b'){map[0][2] = 'b';n = 1;}else if (map[1][0] == 'w' && map[0][0] == 'b' && map[2][0] == 'b' ||map[1][0] == 'w' && map[1][1] == 'b' && map[1][2] == 'b'){map[1][0] = 'b';n = 1;}else if (map[1][1] == 'w' && map[1][0] == 'b' && map[1][2] == 'b' ||map[1][1] == 'w' && map[0][1] == 'b' && map[2][1] == 'b' ||map[1][1] == 'w' && map[0][0] == 'b' && map[2][2] == 'b' ||map[1][1] == 'w' && map[0][2] == 'b' && map[2][0] == 'b'){map[1][1] = 'b';n = 1;}else if (map[1][2] == 'w' && map[0][2] == 'b' && map[2][2] == 'b' ||map[1][2] == 'w' && map[1][0] == 'b' && map[1][1] == 'b'){map[1][2] = 'b';n = 1;}else if (map[2][0] == 'w' && map[0][0] == 'b' && map[1][0] == 'b' ||map[2][0] == 'w' && map[1][1] == 'b' && map[0][2] == 'b' ||map[2][0] == 'w' && map[2][1] == 'b' && map[2][2] == 'b'){map[2][0] = 'b';n = 1;}else if (map[2][1] == 'w' && map[2][0] == 'b' && map[2][2] == 'b' ||map[2][1] == 'w' && map[1][1] == 'b' && map[0][1] == 'b'){map[2][1] = 'b';n = 1;}else if (map[2][2] == 'w' && map[2][0] == 'b' && map[2][1] == 'b' ||map[2][2] == 'w' && map[0][2] == 'b' && map[1][2] == 'b' ||map[2][2] == 'w' && map[0][0] == 'b' && map[1][1] == 'b'){map[2][2] = 'b';n = 1;}
}
void jiexue()//解穴函数--疗伤函数
{if (map[0][0] == 'w') {map[0][0] = 'b';}else if (map[0][1] == 'w') {map[0][1] = 'b';}else if (map[0][2] == 'w') {map[0][2] = 'b';}else if (map[1][0] == 'w') {map[1][0] = 'b';}else if (map[1][1] == 'w') {map[1][1] = 'b';}else if (map[1][2] == 'w') {map[1][2] = 'b';}else if (map[2][0] == 'w') {map[2][0] = 'b';}else if (map[2][1] == 'w') {map[2][1] = 'b';}else if (map[2][2] == 'w') {map[2][2] = 'b';}
}void Artificial_Intelligence()         //人工智能函数——让ai与自己对弈,实现b堵截功能
{int r = rand() % 9 + 1;//生成1~9的随机数if (k == 1)//轮到AI下棋了{if (c == 1)//第一轮:随机{if (map[1][2] == 'a'){AIbuding(5);}else if (map[0][1] == 'a'){AIbuding(5);}else if (map[1][0] == 'a'){AIbuding(5);}else if (map[2][1] == 'a'){AIbuding(5);}else if (map[1][1] == 'a')//破解三角阵{map[0][0] = 'b';//map[0][2] = 'b'    map[2][0] = 'b'      map[2][2] = 'b'}else if (map[0][0] == 'a')//破解三角阵{map[1][1] = 'b';//以点破面}else if (map[0][2] == 'a')//破解三角阵{map[1][1] = 'b';//以点破面}else if (map[2][0] == 'a')//破解三角阵{map[1][1] = 'b';//以点破面}else if (map[2][2] == 'a')//破解三角阵{map[1][1] = 'b';//以点破面}}else if (c == 2)//第二轮:要么堵,要么随机{if (map[1][0] == 'a' && map[0][1] == 'a' && map[1][1] == 'b'){AIbuding(1);//1 3 7 9  6}else if (map[1][0] == 'a' && map[2][1] == 'a' && map[1][1] == 'b'){AIbuding(7);//1 3 7 9  6}else if (map[1][2] == 'a' && map[2][1] == 'a' && map[1][1] == 'b'){AIbuding(9);//1 3 7 9  4}else if (map[1][2] == 'a' && map[0][1] == 'a' && map[1][1] == 'b'){AIbuding(3);//1 3 7 9  6}else if (map[2][0] == 'a' && map[0][1] == 'a' && map[1][1] == 'b'){AIbuding(1);//}else if (map[2][1] == 'a' && map[0][0] == 'a' && map[1][1] == 'b'){AIbuding(3);//}else if (map[2][2] == 'a' && map[0][1] == 'a' && map[1][1] == 'b'){AIbuding(3);//}else if (map[0][2] == 'a' && map[2][1] == 'a' && map[1][1] == 'b'){AIbuding(1);//}else if (map[0][0] == 'a' && map[1][2] == 'a' && map[1][1] == 'b'){AIbuding(7);//}else if (map[0][2] == 'a' && map[1][0] == 'a' && map[1][1] == 'b'){AIbuding(9);//}else if (map[2][0] == 'a' && map[1][2] == 'a' && map[1][1] == 'b'){AIbuding(1);//}else if (map[2][2] == 'a' && map[1][0] == 'a' && map[1][1] == 'b'){AIbuding(3);//}//包夹else if (map[2][2] == 'a' && map[0][0] == 'a' && map[1][1] == 'b'){AIbuding(6);//}else if (map[2][0] == 'a' && map[0][2] == 'a' && map[1][1] == 'b'){AIbuding(4);//}else if (map[1][0] == 'a' && map[1][2] == 'a' && map[1][1] == 'b'){AIbuding(1);//}else if (map[2][1] == 'a' && map[0][1] == 'a' && map[1][1] == 'b'){AIbuding(3);//}else if (map[2][2] == 'a' && map[1][1] == 'a' && map[0][0] == 'b'){AIbuding(3);//}else if (v == 0){AIbuding_2();}}else if (c == 3)//第三轮:要么堵,要么随机{int q = 1;if (map[1][0] == 'a' && map[0][1] == 'a' && map[1][1] == 'a' && map[1][2] == 'b' && map[2][1] == 'b')//双毒性{AIbuding(9);q = 0;}else if (map[1][0] == 'a' && map[0][1] == 'a' && map[1][1] == 'a' && map[1][2] == 'b' && map[0][0] == 'b')//双毒性{AIbuding(8);q = 0;}else if (map[1][0] == 'a' && map[0][1] == 'a' && map[1][1] == 'a' && map[2][1] == 'b' && map[0][0] == 'b')//双毒性{AIbuding(6);q = 0;}//else if (map[1][0] == 'a' && map[2][1] == 'a' && map[1][1] == 'a' && map[1][2] == 'b' && map[0][1] == 'b')//双毒性{AIbuding(3);q = 0;}//else if (map[1][0] == 'a' && map[2][1] == 'a' && map[0][1] == 'a' && map[1][2] == 'b' && map[1][1] == 'b')//双毒性{AIbuding(3);q = 0;}else if (map[1][0] == 'a' && map[2][1] == 'a' && map[0][1] == 'a' && map[0][2] == 'b' && map[1][1] == 'b')//双毒性{AIbuding(9);q = 0;}else if (map[1][0] == 'a' && map[2][1] == 'a' && map[0][1] == 'a' && map[0][0] == 'b' && map[1][1] == 'b')//双毒性{AIbuding(9);q = 0;}//else if (map[1][0] == 'a' && map[1][2] == 'a' && map[0][1] == 'a' && map[0][2] == 'b' && map[1][1] == 'b')//双毒性{AIbuding(1);q = 0;}else if (map[1][0] == 'a' && map[1][2] == 'a' && map[0][1] == 'a' && map[2][0] == 'b' && map[1][1] == 'b')//双毒性{AIbuding(1);q = 0;}else if (map[1][0] == 'a' && map[1][2] == 'a' && map[0][1] == 'a' && map[0][0] == 'b' && map[1][1] == 'b')//双毒性{AIbuding(3);q = 0;}//else if (map[2][1] == 'a' && map[1][2] == 'a' && map[0][1] == 'a' && map[2][0] == 'b' && map[1][1] == 'b')//双毒性{AIbuding(1);q = 0;}else if (map[2][1] == 'a' && map[1][2] == 'a' && map[0][1] == 'a' && map[0][2] == 'b' && map[1][1] == 'b')//双毒性{AIbuding(9);}else if (map[2][1] == 'a' && map[1][2] == 'a' && map[0][1] == 'a' && map[0][0] == 'b' && map[1][1] == 'b')//双毒性{AIbuding(3);q = 0;}//else if (map[2][1] == 'a' && map[1][0] == 'a' && map[1][2] == 'a' && map[0][0] == 'b' && map[1][1] == 'b')//双毒性{AIbuding(3);q = 0;}else if (map[2][1] == 'a' && map[1][0] == 'a' && map[1][2] == 'a' && map[0][0] == 'b' && map[1][1] == 'b')//双毒性{AIbuding(3);q = 0;}//else if (map[2][1] == 'a' && map[1][0] == 'a' && map[0][2] == 'a' && map[2][0] == 'b' && map[1][1] == 'b'){AIbuding(9);q = 0;}else if (map[2][2] == 'a' && map[1][0] == 'a' && map[0][1] == 'a' && map[0][0] == 'b' && map[1][1] == 'b'){AIbuding(7);q = 0;}else if (map[2][1] == 'a' && map[0][0] == 'a' && map[1][2] == 'a' && map[2][2] == 'b' && map[1][1] == 'b'){AIbuding(7);q = 0;}else if (map[0][1] == 'a' && map[1][2] == 'a' && map[2][0] == 'a' && map[0][2] == 'b' && map[1][1] == 'b'){AIbuding(9);q = 0;}else if (map[2][0] == 'a' && map[1][2] == 'a' && map[0][0] == 'a' && map[1][0] == 'b' && map[1][1] == 'b')//大三角{AIbuding(2);//8 3 9q = 0;}else if (map[2][1] == 'a' && map[0][2] == 'a' && map[0][0] == 'a' && map[1][1] == 'b' && map[0][1] == 'b')//大三角{AIbuding(4);//4 6 7 9q = 0;}else if (map[2][2] == 'a' && map[0][2] == 'a' && map[1][0] == 'a' && map[1][1] == 'b' && map[1][2] == 'b')//大三角{AIbuding(2);//1 2 7 8q = 0;}else if (map[2][0] == 'a' && map[0][1] == 'a' && map[2][2] == 'a' && map[1][1] == 'b' && map[2][1] == 'b')//大三角{AIbuding(1);//1   3    4   6q = 0;}//else if (map[0][1] == 'a' && map[1][1] == 'a' && map[2][0] == 'a' && map[0][0] == 'b' && map[0][2] == 'b')//插缝{AIbuding(8);q = 0;}else if (map[0][1] == 'a' && map[1][1] == 'a' && map[2][2] == 'a' && map[0][0] == 'b' && map[0][2] == 'b')//插缝{AIbuding(8);q = 0;}else if (q == 1){AIbuding_3();}if (n == 0){AIbuding_2();}}else if (c == 4)//第4轮://赢,堵,随机{int q = 1;if (map[1][0] == 'a' && map[0][1] == 'a' && map[1][1] == 'a' && map[2][2] == 'a' && map[1][2] == 'b' && map[2][1] == 'b' && map[0][0] == 'b')//三毒性{AIbuding(3);//7q = 0;}else if (map[1][0] == 'a' && map[2][1] == 'a' && map[1][1] == 'a' && map[0][2] == 'a' && map[1][2] == 'b' && map[2][0] == 'b' && map[0][1] == 'b')//三毒性{AIbuding(0);//9q = 0;}else if (map[1][0] == 'a' && map[2][1] == 'a' && map[1][1] == 'a' && map[0][2] == 'a' && map[1][2] == 'b' && map[2][0] == 'b' && map[0][1] == 'b')//三毒性{AIbuding(0);//9q = 0;}else if (map[1][0] == 'a' && map[2][2] == 'a' && map[1][1] == 'a' && map[0][2] == 'a' && map[1][2] == 'b' && map[2][0] == 'b' && map[0][0] == 'b')//三毒性{AIbuding(2);//8q = 0;}else if (map[2][0] == 'a' && map[2][2] == 'a' && map[1][1] == 'a' && map[0][1] == 'a' && map[0][2] == 'b' && map[2][1] == 'b' && map[0][0] == 'b')//三毒性{AIbuding(4);//6q = 0;}else if (map[2][1] == 'a' && map[2][2] == 'a' && map[1][0] == 'a' && map[1][2] == 'a' && map[0][1] == 'b' && map[1][1] == 'b' && map[1][2] == 'b')//三毒性{AIbuding(7);//6q = 0;}else if (q == 1){AIbuding_3();}if (n == 0){AIbuding_2();}}k = 0;//b下完让k等于0,a才能继续下}
}void updatenotautomation_2()       // 双人模式下的手动的更新
{int exit = 0;cleardevice();while (exit != 1){// 获取一条鼠标消息ExMessage m;//定义一个消息变量m = getmessage(EM_MOUSE);//获取鼠标消息switch (m.message){case WM_LBUTTONDOWN://点击左键下棋将w变成aif (k == 0)//k = 0,轮到a下{if (m.y < 200 && m.y>0)//在第一排{if (m.x > 0 && m.x < 200 && map[0][0] == 'w')//在第1个格子{map[0][0] = 'a';exit = 1;//退出循环}else if (m.x > 200 && m.x < 400 && map[0][1] == 'w')//在第2个格子{map[0][1] = 'a';exit = 1;//退出循环}else if (m.x > 400 && m.x < 600 && map[0][2] == 'w')//在第3个格子{map[0][2] = 'a';exit = 1;//退出循环}}else if (m.y < 400 && m.y>200)//在第2排{if (m.x > 0 && m.x < 200 && map[1][0] == 'w')//在第4个格子{map[1][0] = 'a';exit = 1;//退出循环}else if (m.x > 200 && m.x < 400 && map[1][1] == 'w')//在第5个格子{map[1][1] = 'a';exit = 1;//退出循环}else if (m.x > 400 && m.x < 600 && map[1][2] == 'w')//在第6个格子{map[1][2] = 'a';exit = 1;//退出循环}}else if (m.y < 600 && m.y>400)//在第3排{if (m.x > 0 && m.x < 200 && map[2][0] == 'w')//在第7个格子{map[2][0] = 'a';exit = 1;//退出循环}else if (m.x > 200 && m.x < 400 && map[2][1] == 'w')//在第8个格子{map[2][1] = 'a';exit = 1;//退出循环}else if (m.x > 400 && m.x < 600 && map[2][2] == 'w')//在第9个格子{map[2][2] = 'a';exit = 1;//退出循环}}k = 1;//令k = 1,轮到b下。}else if (k == 1)//k = 0,轮到 b 下{if (m.y < 200 && m.y > 0)//在第1排{if (m.x > 0 && m.x < 200 && map[0][0] == 'w')//在第1个格子{map[0][0] = 'b';exit = 1;//退出循环}else if (m.x > 200 && m.x < 400 && map[0][1] == 'w')//在第2个格子{map[0][1] = 'b';exit = 1;//退出循环}else if (m.x > 400 && m.x < 600 && map[0][2] == 'w')//在第3个格子{map[0][2] = 'b';exit = 1;//退出循环}}else if (m.y < 400 && m.y > 200)//在第2排{if (m.x > 0 && m.x < 200 && map[1][0] == 'w')//在第4个格子{map[1][0] = 'b';exit = 1;//退出循环}else if (m.x > 200 && m.x < 400 && map[1][1] == 'w')//在第5个格子{map[1][1] = 'b';exit = 1;//退出循环}else if (m.x > 400 && m.x < 600 && map[1][2] == 'w')//在第6个格子{map[1][2] = 'b';exit = 1;//退出循环}}else if (m.y < 600 && m.y>400)//在第3排{if (m.x > 0 && m.x < 200 && map[2][0] == 'w')//在第7个格子{map[2][0] = 'b';exit = 1;//退出循环}else if (m.x > 200 && m.x < 400 && map[2][1] == 'w')//在第8个格子{map[2][1] = 'b';exit = 1;//退出循环}else if (m.x > 400 && m.x < 600 && map[2][2] == 'w')//在第9个格子{map[2][2] = 'b';exit = 1;//退出循环}}k = 0;}break;case WM_RBUTTONUP:// 按鼠标右键撤回将a变成wbreak;}}
}
void wordawin()//显示a赢文字存放于判断胜负函数
{setbkmode(TRANSPARENT);//显示透明文字settextcolor(BLUE);//设置字体颜色settextstyle(80, 0, _T("宋体"));outtextxy(80, 200, _T("蓝棋胜利"));FlushBatchDraw();Sleep(2000);w = 1;
}
void wordbwin()//显示b赢文字存放于判断胜负函数
{setbkmode(TRANSPARENT);//显示透明文字settextcolor(RED);//设置字体颜色settextstyle(80, 0, _T("宋体"));outtextxy(80, 200, _T("红棋胜利"));FlushBatchDraw();Sleep(2000);w = 1;
}
void wordwin()//显示
{setbkmode(TRANSPARENT);//显示透明文字settextcolor(GREEN);//设置字体颜色settextstyle(80, 0, _T("宋体"));outtextxy(80, 200, _T("平局"));FlushBatchDraw();Sleep(2000);
}
void panduanshengfu_a()//判断a的胜负函数存放于自动更新函数内
{if (map[0][0] == 'a' && map[0][1] == 'a' && map[0][2] == 'a')//1排a胜{wina = 1;wordawin();w = 1;}else if (map[1][0] == 'a' && map[1][1] == 'a' && map[1][2] == 'a')//2排a胜{wina = 1;wordawin();w = 1;}else if (map[2][0] == 'a' && map[2][1] == 'a' && map[2][2] == 'a')//3排a胜{wina = 1;wordawin();w = 1;}else if (map[0][0] == 'a' && map[1][0] == 'a' && map[2][0] == 'a')//1列a胜{wina = 1;wordawin();w = 1;}else if (map[0][1] == 'a' && map[1][1] == 'a' && map[2][1] == 'a')//2列a胜{wina = 1;wordawin();w = 1;}else if (map[0][2] == 'a' && map[1][2] == 'a' && map[2][2] == 'a')//3列a胜{wina = 1;wordawin();w = 1;}else if (map[0][0] == 'a' && map[1][1] == 'a' && map[2][2] == 'a')//左斜a胜{wina = 1;wordawin();w = 1;}else if (map[0][2] == 'a' && map[1][1] == 'a' && map[2][0] == 'a')//右斜a胜{wina = 1;wordawin();w = 1;}
}
void panduanshengfu_b()//判断b的胜负函数存放于自动更新函数内
{if (map[0][0] == 'b' && map[0][1] == 'b' && map[0][2] == 'b')//1排b胜{winb = 1;wordbwin();w = 1;}else if (map[1][0] == 'b' && map[1][1] == 'b' && map[1][2] == 'b')//2排b胜{winb = 1;wordbwin();w = 1;}else if (map[2][0] == 'b' && map[2][1] == 'b' && map[2][2] == 'b')//3排b胜{winb = 1;wordbwin();w = 1;}else if (map[0][0] == 'b' && map[1][0] == 'b' && map[2][0] == 'b')//1列b胜{winb = 1;wordbwin();w = 1;}else if (map[0][1] == 'b' && map[1][1] == 'b' && map[2][1] == 'b')//2列b胜{winb = 1;wordbwin();w = 1;}else if (map[0][2] == 'b' && map[1][2] == 'b' && map[2][2] == 'b')//3列b胜{winb = 1;wordbwin();w = 1;}else if (map[0][0] == 'b' && map[1][1] == 'b' && map[2][2] == 'b')//左斜b胜{winb = 1;wordbwin();w = 1;}else if (map[0][2] == 'b' && map[1][1] == 'b' && map[2][0] == 'b')//右斜b胜{winb = 1;wordbwin();w = 1;}
}
void updateautomation()  // 自动更新
{panduanshengfu_a();//判断a赢的所有可能性panduanshengfu_b();//判断b赢的所有可能性
}
void gameover()     //游戏结束
{closegraph();
}
int main() // 主函数
{gamebegin();   // 初始化if (mood == 1)//单人模式+++++++{while (true)       // 一直循环{gamebegin_1();    // 二次初始化if (mood == 1){while (1){updateautomation(); // 与输入无关的更新(单双人都可目前的功能只负责判断胜负)if (w == 1) { Sleep(2000); break; }gameshow();  // 显示(单双人都可)if (q == 0) { wordwin(); break; }updatenotautomation_1();    // 与输入有关的更新_1代表单人模式Artificial_Intelligence();//人工智能函数——让ai与自己对弈,实现b堵截功能}}if (mood == 2){while (1){updateautomation(); // 与输入无关的更新(单双人都可目前的功能只负责判断胜负)if (w == 1) { Sleep(2000); break; }gameshow();  // 显示(单双人都可)if (q == 0) { Sleep(1000); break; }updatenotautomation_2();    // 与输入有关的更新_2代表双人}}}}else if (mood == 2)//双人模式++++++++{while (true)       // 一直循环{gamebegin_1();    // 二次初始化if (mood == 2){while (1){updateautomation(); // 与输入无关的更新(单双人都可目前的功能只负责判断胜负)if (w == 1) { Sleep(2000); break; }gameshow();  // 显示(单双人都可)if (q == 0) { Sleep(1000); break; }updatenotautomation_2();    // 与输入有关的更新_2代表双人}}if (mood == 1){while (1){updateautomation(); // 与输入无关的更新(单双人都可目前的功能只负责判断胜负)if (w == 1) { Sleep(2000); break; }gameshow();  // 显示(单双人都可)if (q == 0) { wordwin(); break; }updatenotautomation_1();    // 与输入有关的更新_1代表单人模式Artificial_Intelligence();//人工智能函数——让ai与自己对弈,实现b堵截功能}}}}gameover();return 0;
}

C++游戏编程--图像界面+AI堵棋--实现简易三字棋小游戏相关推荐

  1. [原创]中国象棋翻翻棋,休闲,对战,娱乐,小游戏,jQuery小游戏,下载即用,代码注释全(附源码)

    ChessInvert 介绍 中国象棋翻翻棋,休闲,对战,娱乐,小游戏,在线 效果预览 开源许可证 使用 Apache-2.0 开源许可协议,商用请联系原创作者me. 使用说明 引入jQuery,及j ...

  2. python编写小游戏教程_用Python开发 写个消消乐小游戏

    提到开心消消乐这款小游戏,相信大家都不陌生,其曾在 2015 年获得过玩家最喜爱的移动单机游戏奖,受欢迎程度可见一斑,本文我们使用 Python 来做个简单的消消乐小游戏. 实现 消消乐的构成主要包括 ...

  3. Unity 游戏实例开发集合 之 CompoundBigWatermelon (简单合成一个大西瓜) 休闲小游戏快速实现

    Unity 游戏实例开发集合 之 CompoundBigWatermelon (简单合成一个大西瓜) 休闲小游戏快速实现 目录 Unity 游戏实例开发集合 之 CompoundBigWatermel ...

  4. CocosCreator像素鸟小游戏实现(有源码)超详细教程 TS实现小游戏 零基础开发

    CocosCreator像素鸟小游戏实现(有源码)超详细教程 TS实现小游戏 大家中秋国庆快乐哈 前言 老规矩先看效果 源码的获取方式在最下面 对于本游戏来说canvas这样设置最佳哦 游戏实现思路: ...

  5. 一款使用JavaScript实现的篮球投篮游戏源代码,在浏览器里就能玩的篮球小游戏代码

    一款使用JavaScript实现的篮球投篮游戏源代码,在浏览器里就能玩的篮球小游戏代码 -根据光标的移动,沿某个方向击球 -球改变大小以使体验像3D一样 -音效让体验像真实生活! -球与轮辋碰撞并反弹 ...

  6. Unity 游戏实例开发集合 之 Car Racing 2D (2D赛车) 休闲小游戏快速实现

    Unity 游戏实例开发集合 之 Car Racing 2D (2D赛车) 休闲小游戏快速实现 目录 Unity 游戏实例开发集合 之 Car Racing 2D (2D赛车) 休闲小游戏快速实现 一 ...

  7. Python【小游戏合集】之重温童年最爱的扫雷小游戏

    导语: 哈喽吖!有许多铁汁们私信小编说用Python自行制作小游戏 ‍ ‍ 之后简直就是上头了~让wo多出一点小游戏合集(看来铁汁们跟小编一样都酷爱游戏) 有求必应~小游戏立刻安排上啦~~(扫雷真的是 ...

  8. c语言小游戏 精简_C语言开发简易版扫雷小游戏

    C 语言开发简易版扫雷小游戏 本文给大家分享的是一个使用 C 语言开发的命令行下的简易版扫雷小游戏, 本身没有什么太 多的技术含量, 只不过是笔者的处女作, 所以还是推荐给大家, 希望对大家学习 C ...

  9. 游戏编程入门(5):使用键盘和鼠标控制游戏

    接上文 游戏编程入门(4):绘制图形图像 本文内容包括: 如何有效地检测和响应键盘输入 如何处理鼠标输入 如何开发带有动画图形对象的程序,并且可以使用键盘和鼠标来控制动画图形对象 用户输入设备 输入设 ...

最新文章

  1. 图片爬取数据解析数据持久化
  2. java web 获取根目录_javaweb中获取服务器端跟目录方法总结
  3. MIPI CSI-2学习
  4. E:Modular Stability(组合数)
  5. AttachDispatch
  6. yum 安装mysql 5.0_CentOS 通过 yum 安装 Mysql 5.0
  7. android java代码打印系统日志_Java快速开发平台源码
  8. 9ztu.com 就找图商品图片商品条码搜索引擎
  9. 百度——LBS.云 v2.0——云存储的POI创建和删除--Android 源码
  10. MySQL的高可用实现:MySQL系列之十四
  11. 网络的小区号和网络tac_网络问政|城基路老旧小区排污管长期堵塞没人管?
  12. TensorFlow中tf.ConfigProto()配置Sesion运算方式
  13. 最近想入门股票,请问要如何操作?转载(博主备注)
  14. Gin实现论坛(一)
  15. AXI 基础第 4 讲 - 使用 AXI VIP 作为 AXI4 主接口的协议检查工具
  16. LTE 中的CQI,PMI,RI上报机制
  17. 《开天辟地》之《网上冲浪篇》将带你进入一个精彩的互联网世界
  18. 可以免费下载视频素材和模板网站汇总
  19. edgexfoundry docker 容器化部署 ubuntu16.4 跑起来 go0.6.0 版
  20. 信创产业现状、分析与预测

热门文章

  1. 汇编语言实验九-《汇编语言-王爽老师》
  2. java侠义游戏下载_侠义OL-八龙聚首
  3. 首次揭秘年薪40万Java开发在阿里巴巴是什么水平?
  4. 每临大事有静气,不信今时无古贤
  5. 关于photoshop如何画直线
  6. Glib学习(1)——thread
  7. Flutter 垂直居中
  8. 办公软件测试题目,常用办公软件测试题.doc
  9. lengthb 函数和 length 函数
  10. 根据示例代码学习爬取漫画(一)