文章目录

前言

代码部分

不靠谱的结束语


前言

熟悉的味道,游戏,它又回来了······

主要是看游戏这个专栏很,所以今天再来写一篇关于游戏的博客吧。

来看一下运行截图(瞎下的):

代码也是基于easyx来做的,所以需要安装easyx后才能够运行。

代码部分

直接上干货:

#include <iostream>
#include <graphics.h>
#include <string.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>class seat
{public:int i = 0;int j = 0;int number = 0;
};class box
{public:void draw();public:int x = 0;int y = 0;int value = -1;int modle = 0;bool isnew = false;COLORREF color = WHITE;
};void draw();
void init();
seat findbestseat(int color, int c);
void isWIN();
void game();int main()
{initgraph(700, 700);setbkcolor(WHITE);cleardevice();setbkmode(TRANSPARENT);while (true){init();game();cleardevice();}
}box BOX[19][19];
int win = -1;
int whoplay = 0;
int playercolor = 0;
int dx[4]{1, 0, 1, 1};
int dy[4]{0, 1, 1, -1};
int Score[3][5] = {{0, 80, 250, 500, 500}, {0, 0, 80, 250, 500}, {0, 0, 0, 80, 500}};
int MAXxs[361];
int MAXys[361];
int mylength = 0;void box::draw()
{COLORREF thefillcolor = getfillcolor();setlinestyle(PS_SOLID, 2);setfillcolor(color);solidrectangle(x, y, x + 30, y + 30);if (isnew){setlinecolor(LIGHTGRAY);line(x + 1, y + 2, x + 8, y + 2);line(x + 2, y + 1, x + 2, y + 8);line(x + 29, y + 2, x + 22, y + 2);line(x + 29, y + 1, x + 29, y + 8);line(x + 2, y + 29, x + 8, y + 29);line(x + 2, y + 22, x + 2, y + 29);line(x + 29, y + 29, x + 22, y + 29);line(x + 29, y + 22, x + 29, y + 29);}setlinecolor(BLACK);switch (modle){case 0:line(x + 15, y, x + 15, y + 30);line(x - 1, y + 15, x + 30, y + 15);break;case 1:line(x + 14, y + 15, x + 30, y + 15);setlinestyle(PS_SOLID, 3);line(x + 15, y, x + 15, y + 30);setlinestyle(PS_SOLID, 2);break;case 2:line(x - 1, y + 15, x + 15, y + 15);setlinestyle(PS_SOLID, 3);line(x + 15, y, x + 15, y + 30);setlinestyle(PS_SOLID, 2);break;case 3:line(x + 15, y + 15, x + 15, y + 30);setlinestyle(PS_SOLID, 3);line(x - 1, y + 15, x + 30, y + 15);setlinestyle(PS_SOLID, 2);break;case 4:line(x + 15, y, x + 15, y + 15);setlinestyle(PS_SOLID, 3);line(x - 1, y + 15, x + 30, y + 15);setlinestyle(PS_SOLID, 2);break;case 5:setlinestyle(PS_SOLID, 3);line(x + 15, y, x + 15, y + 15);line(x + 15, y + 15, x + 30, y + 15);setlinestyle(PS_SOLID, 2);break;case 6:setlinestyle(PS_SOLID, 3);line(x + 15, y, x + 15, y + 15);line(x - 1, y + 15, x + 15, y + 15);setlinestyle(PS_SOLID, 2);break;case 7:setlinestyle(PS_SOLID, 3);line(x - 1, y + 15, x + 15, y + 15);line(x + 15, y + 15, x + 15, y + 30);setlinestyle(PS_SOLID, 2);break;case 8:setlinestyle(PS_SOLID, 3);line(x + 15, y + 15, x + 30, y + 15);line(x + 15, y + 15, x + 15, y + 30);setlinestyle(PS_SOLID, 2);break;case 9:line(x + 15, y, x + 15, y + 30);line(x - 1, y + 15, x + 30, y + 15);setfillcolor(BLACK);setlinestyle(PS_SOLID, 1);fillcircle(x + 15, y + 15, 4);break;}switch (value){case 0:setfillcolor(WHITE);setlinestyle(PS_SOLID, 1);fillcircle(x + 15, y + 15, 13);break;case 1:setfillcolor(BLACK);setlinestyle(PS_SOLID, 1);fillcircle(x + 15, y + 15, 13);break;}setfillcolor(thefillcolor);
}void draw()
{int number = 0;TCHAR strnum[19][3] = {_T("1"), _T("2"), _T("3"), _T("4"), _T("5"), _T("6"), _T("7"), _T("8"), _T("9"), _T("10"), _T("11"), _T("12"), _T("13"), _T("14"), _T("15"), _T("16"), _T("17"), _T("18"), _T("19")};TCHAR strabc[19][3] = {_T("A"), _T("B"), _T("C"), _T("D"), _T("E"), _T("F"), _T("G"), _T("H"), _T("I"), _T("J"), _T("K"), _T("L"), _T("M"), _T("N"), _T("O"), _T("P"), _T("Q"), _T("R"), _T("S")};LOGFONT nowstyle;gettextstyle(&nowstyle);settextstyle(0, 0, NULL);for (int i = 0; i < 19; i++){for (int j = 0; j < 19; j++){BOX[i][j].draw();if (BOX[i][j].isnew == true){BOX[i][j].isnew = false;}}}for (int i = 0; i < 19; i++){outtextxy(75 + number, 35, strnum[i]);outtextxy(53, 55 + number, strabc[i]);number += 30;}settextstyle(&nowstyle);
}void init()
{win = -1;for (int i = 0, k = 0; i < 570; i += 30){for (int j = 0, g = 0; j < 570; j += 30){int modle = 0;BOX[k][g].value = -1;BOX[k][g].color = RGB(255, 205, 150);BOX[k][g].x = 65 + j;BOX[k][g].y = 50 + i;if (k == 0 && g == 0){modle = 8;}else if (k == 0 && g == 18){modle = 7;}else if (k == 18 && g == 18){modle = 6;}else if (k == 18 && g == 0){modle = 5;}else if (k == 0){modle = 3;}else if (k == 18){modle = 4;}else if (g == 0){modle = 1;}else if (g == 18){modle = 2;}else if ((k == 3 && g == 3) || (k == 3 && g == 15) || (k == 15 && g == 3) || (k == 15 && g == 15) || (k == 3 && g == 9) || (k == 9 && g == 3) || (k == 15 && g == 9) || (k == 9 && g == 15) || (k == 9 && g == 9)){modle = 9;}else{modle = 0;}BOX[k][g].modle = modle;g++;}k++;}
}seat findbestseat(int color, int c)
{if (c == 0){mylength = 0;}int MAXnumber = -1e9;for (int i = 0; i < 19; i++){for (int j = 0; j < 19; j++){if (BOX[i][j].value == -1){int length;int emeny;int nowi = 0;int nowj = 0;int thescore = 0;int is = 0;for (int k = 0; k < 4; k++){nowi = i;nowj = j;nowi += dx[k];nowj += dy[k];if (nowi >= 0 && nowj >= 0 && nowi <= 18 && nowj <= 18 && BOX[nowi][nowj].value != -1){is = 1;break;}nowi = i;nowj = j;nowi += dx[k];nowj += dy[k];if (nowi >= 0 && nowj >= 0 && nowi <= 18 && nowj <= 18 && BOX[nowi][nowj].value != -1){is = 1;break;}nowi = i;nowj = j;nowi -= dx[k];nowj -= dy[k];if (nowi >= 0 && nowj >= 0 && nowi <= 18 && nowj <= 18 && BOX[nowi][nowj].value != -1){is = 1;break;}nowi = i;nowj = j;nowi -= dx[k];nowj -= dy[k];if (nowi >= 0 && nowj >= 0 && nowi <= 18 && nowj <= 18 && BOX[nowi][nowj].value != -1){is = 1;break;}}if (!is){continue;}BOX[i][j].value = color;for (int k = 0; k < 4; k++){length = 0;emeny = 0;nowi = i;nowj = j;while (nowi <= 18 && nowj <= 18 && nowi >= 0 && nowj >= 0 && BOX[nowi][nowj].value == color){length++;nowj += dy[k];nowi += dx[k];}if (nowi < 0 || nowj < 0 || nowi > 18 || nowj > 18 || BOX[nowi][nowj].value == !color){emeny++;}nowi = i;nowj = j;while (nowi <= 18 && nowj <= 18 && nowi >= 0 && nowj >= 0 && BOX[nowi][nowj].value == color){length++;nowj -= dy[k];nowi -= dx[k];}if (nowi < 0 || nowj < 0 || nowi > 18 || nowj > 18 || BOX[nowi][nowj].value == !color){emeny++;}length -= 2;if (length > 4){length = 4;}if (Score[emeny][length] == 500){BOX[i][j].value = -1;return {i, j, Score[emeny][length]};}thescore += Score[emeny][length];length = 0;emeny = 0;}BOX[i][j].value = !color;for (int k = 0; k < 4; k++){length = 0;emeny = 0;nowi = i;nowj = j;while (nowi <= 18 && nowj <= 18 && nowi >= 0 && nowj >= 0 && BOX[nowi][nowj].value == !color){length++;nowj += dy[k];nowi += dx[k];}if (nowi < 0 || nowj < 0 || nowi > 18 || nowj > 18 || BOX[nowi][nowj].value == color){emeny++;}nowi = i;nowj = j;while (nowi <= 18 && nowj <= 18 && nowi >= 0 && nowj >= 0 && BOX[nowi][nowj].value == !color){length++;nowj -= dy[k];nowi -= dx[k];}if (nowi < 0 || nowj < 0 || nowi > 18 || nowj > 18 || BOX[nowi][nowj].value == color){emeny++;}length -= 2;if (length > 4){length = 4;}if (Score[emeny][length] == 500){BOX[i][j].value = -1;return {i, j, Score[emeny][length]};}thescore += Score[emeny][length];length = 0;emeny = 0;}BOX[i][j].value = -1;if (thescore >= MAXnumber){if (c < 3){BOX[i][j].value = color;int nowScore = thescore - findbestseat(!color, c + 1).number;BOX[i][j].value = -1;if (nowScore > MAXnumber){MAXnumber = nowScore;if (c == 0){mylength = 0;}}if (c == 0){if (nowScore >= MAXnumber){MAXxs[mylength] = i;MAXys[mylength] = j;mylength++;}}}else{if (thescore > MAXnumber){MAXnumber = thescore;}}}}}}if (c == 0){int mynum = rand() % mylength;return {MAXxs[mynum], MAXys[mynum], MAXnumber};}return {0, 0, MAXnumber};
}void isWIN()
{bool isfull = true;for (int i = 0; i < 19; i++){for (int j = 0; j < 19; j++){if (BOX[i][j].value != -1){int nowcolor = BOX[i][j].value;int length[4] = {0, 0, 0, 0};for (int k = 0; k < 4; k++){int nowi = i;int nowj = j;while (nowi <= 18 && nowj <= 18 && nowi >= 0 && nowj >= 0 && BOX[nowi][nowj].value == nowcolor){length[k]++;nowj += dx[k];nowi += dy[k];}nowi = i;nowj = j;while (nowi <= 18 && nowj <= 18 && nowi >= 0 && nowj >= 0 && BOX[nowi][nowj].value == 1 - nowcolor){length[k]++;nowj -= dx[k];nowi -= dy[k];}}for (int k = 0; k < 4; k++){if (length[k] >= 5){if (nowcolor == playercolor){win = playercolor;}if (nowcolor == 1 - playercolor){win = 1 - playercolor;}}}}else{isfull = false;}}}if (isfull){win = 2;}
}void game()
{bool isinit;int oldi = 0;int oldj = 0;srand(time(NULL));playercolor = rand() % 2;setfillcolor(RGB(255, 205, 150));solidrectangle(40, 25, 645, 630);settextstyle(30, 15, 0, 0, 0, 1000, false, false, false);settextcolor(BLACK);if (playercolor == 0){isinit = 1;outtextxy(150, 650, _T("玩家执白后行,电脑执黑先行"));whoplay = 1;}else{isinit = 0;outtextxy(150, 650, _T("玩家执黑先行,电脑执白后行"));whoplay = 0;}draw();while (1){NEXTPLAYER:if (whoplay == 0){MOUSEMSG mouse = GetMouseMsg();for (int i = 0; i < 19; i++){for (int j = 0; j < 19; j++){if (mouse.x > BOX[i][j].x && mouse.x < BOX[i][j].x + 30 && mouse.y > BOX[i][j].y && mouse.y < BOX[i][j].y + 30 && BOX[i][j].value == -1){if (mouse.mkLButton){BOX[i][j].value = playercolor;BOX[i][j].isnew = true;oldi = -1;oldj = -1;whoplay = 1;goto DRAW;}BOX[oldi][oldj].isnew = false;BOX[oldi][oldj].draw();BOX[i][j].isnew = true;BOX[i][j].draw();oldi = i;oldj = j;}}}}else{if (isinit){isinit = 0;int drawi = 9;int drawj = 9;while (BOX[drawi][drawj].value != -1){drawi--;drawj++;}BOX[drawi][drawj].value = 1 - playercolor;BOX[drawi][drawj].isnew = true;}else{seat best;best = findbestseat(1 - playercolor, 0);BOX[best.i][best.j].value = 1 - playercolor;BOX[best.i][best.j].isnew = true;}whoplay = 0;goto DRAW;}}
DRAW:isWIN();draw();oldi = 0;oldj = 0;if (win == -1){Sleep(500);goto NEXTPLAYER;}settextcolor(RGB(0, 255, 0));Sleep(1000);if (win == 0){outtextxy(320, 320, _T("白胜"));}if (win == 1){outtextxy(320, 320, _T("黑胜"));}if (win == 2){outtextxy(320, 320, _T("平局"));}Sleep(5000);return;
}

不靠谱的结束语

本期文章到此结束,感谢您的观看!

我是Wanghs0716,我们下期不见不散!

C++制作五子棋小游戏相关推荐

  1. GEC6818开发板制作五子棋小游戏

    利用GEC6818开发板制作五子棋小游戏 软件及版本:Ubuntu18.04.4,SecureCRT,Source Insight4.0,VMware Workstation Pro. 主要代码: m ...

  2. matlab 手把手教你制作五子棋小游戏

    想把以前写过的小游戏出一款详细教程呀 这两天发现五子棋有个简单的写法 虽然说有点弊端但这个程序真的很简单呀 一共只有70多行 相信大家就算没有基础多查多看也能学会吧嗯哒 第一步:界面设置 axis e ...

  3. python语言编写五子棋小游戏

    摘要 这是我基于pygame库做个一个五子棋小游戏,通过上网学习pygame库内的具体函数,以及一些前辈的指导.在这里我们需要绘画棋盘,棋子.棋盘直接调用pygame库中的draw.lines()函数 ...

  4. 使用VS制作一个小游戏(五子棋)

    使用VS制作一个小游戏(五子棋) 一.前期准备: 下载Visual Studio(以下使用的是VS2017) 下载Easyx库:官方easyx库下载 右上方下载 二.思路理解 (本次是简单的单机双人五 ...

  5. java五子棋小游戏_java实现五子棋小游戏

    java实现五子棋小游戏 package Gomoku; import java.awt.Toolkit; import javax.swing.JFrame; public class Gomoku ...

  6. Java编写的五子棋小游戏

    看书的时候看到一个不完整的Java编写的一个五子棋小游戏,为了恢复一下编程能力刚刚把这个小程序完成了. 实现的功能很简单,两人对下五子棋,程序自动回判断输赢.在ubuntu下搞得,没有装什么高端的输入 ...

  7. 简单的5*5,五子棋小游戏

    使用C语言简单的实现棋盘为5*5的五子棋小游戏,以下为源代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 ...

  8. python编的俄罗斯方块游戏_手把手制作Python小游戏:俄罗斯方块(一)

    手把手制作Python小游戏:俄罗斯方块1 大家好,新手第一次写文章,请多多指教 A.准备工作: 这里我们运用的是Pygame库,因为Python没有内置,所以需要下载 如果没有pygame,可以到官 ...

  9. php 设计五子棋游戏,基于js+canvas实现五子棋小游戏

    本文实例为大家分享了js+canvas实现五子棋小游戏的具体代码,供大家参考,具体内容如下 效果展示: 源码展示: 五子棋 * { margin: 0; padding: 0; } body { ma ...

最新文章

  1. Android之Fragment使用简介
  2. 怎么用python编简单游戏_用Python实现一个简单的算术游戏详解
  3. oracle查看语句执行历史,AWT查看oracle历史sql语句执行
  4. brew 、carthage 安装
  5. Java 六种异常处理的陋习
  6. typedef int Myfunc(const char *,const struct stat *,int)
  7. Atitit 自然语言处理原理与实现 attilax总结
  8. 中移苏研大规模资源高可用研究及实践
  9. C#,SharpGL开发的3D图表控件
  10. php前台切图,php网页切图/js切图
  11. 如何将 Mac 显示器投放到 Apple TV 或非 Apple 智能电视?
  12. linux中睡眠命令,linux sleep命令详解
  13. java怎么输出无损高清音乐_MP3转换器如何将无损FLAC音频转换成MP3音乐
  14. 自建dnspod解析服务器,利用DNSPOD配置智能解析双线服务器
  15. 《行为设计学》听后感及听书笔记
  16. 【教程】如何批量获取图片信息,尺寸、大小、路径、文件名,然后导出表格或者txt的文本,下面教你使用方法
  17. 联想t450进入bios设置按哪个键_联想台式机怎么进入bios|联想台式电脑按什么键进bios设置...
  18. 什么是应用宝统一链接服务器,applink
  19. 前端实现给文字添加动态背景
  20. DR,CR,DX区别

热门文章

  1. 洛必达法则 - 但是高中OIer并不觉得它很有用
  2. 南卡OE骨传导开放式蓝牙耳机评测!舒适与音质并存!
  3. 计算机协会活动策划,大学计算机协会活动计划书
  4. kvo实现原理_KVO使用及实现原理
  5. 我生存的意义在于取悦我自己
  6. 笔记本装 Win10 后的亮度调节和 WiFi 问题
  7. c语言课程设计报告 火车票,C语言课设报告火车票系统源代码.doc
  8. PV操作-图书馆阅览室问题|操作系统
  9. 网站屏蔽所有人访问,只允许蜘蛛访问
  10. 有哪些代码调试工具推荐? - 易智编译EaseEditing