嗯,有的时候有点智障
但背景和棋子棋盘还是可以的
最后来点音效
颇有XXXX的味道呢

棋盘棋子形状

string C[20]={"●","○","﹢","═","║","╔","╚","╗","╝","·"};///棋盘棋子形状

染色+标记

void color(int a){SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a);}///染色
void gotoxy(int x,int y){COORD pos;pos.X=2*x;pos.Y=y;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);}///标记

更新盘面

void reset()///更新盘面 {system("cls");memset(m,-1,sizeof(m));color(7);for (int i=1; i<=N; i++){gotoxy(0,i);cout<<C[4]; gotoxy(N+1,i);cout<<C[4];gotoxy(i,0);cout<<C[3]; gotoxy(i,N+1);cout<<C[3];}gotoxy(0,0);cout<<C[5]; gotoxy(0,N+1);cout<<C[6];gotoxy(N+1,0);cout<<C[7]; gotoxy(N+1,N+1);cout<<C[8];color(3);Forij(N){gotoxy(i,j); cout<<C[2];}nx=ny=N/2+1; gotoxy(nx,ny);}

落子+查重

void _drop(int x,int i,int j)///落子 {m[i][j]=x;gotoxy(i,j);color(15); cout<<C[x];}int check()///查重,不在有子的地方落子 {Forij(N){for (int Fx=0,tmp,lst,xx,yy; Fx<4; Fx++) if(m[i][j]!=-1){xx=i,yy=j,tmp=0,lst=m[i][j];for (int k=1; k<=5; k++){if (xx>N || yy>N) break;if (m[xx][yy]==(lst^1)){break;}if (m[xx][yy]==lst) tmp++;xx+=fx[Fx][0],yy+=fx[Fx][1];}if (tmp==5){return lst;}}}return -1;}

数子

int arnd(int x,int y)///数子 {int cnt=0;for (int i=x-1; i<=x+1; i++) if (i>0 && i<=N)for (int j=y-1; j<=y+1; j++) if (j>0 && j<=N)if (m[i][j]>-1) cnt++;}

键盘判断

void HM(int x)///键盘判断 {char ch=getch();bool t=224;///读取键盘返回值 for (;;ch=getch()){if (ch=='w'||ch=='W'||ch==72&&t) {if (ny>1) ny--;}///按w或上键向上移动 else if (ch=='s'||ch=='S'||ch==80&&t) {if (ny<N) ny++;}///按s或下键向下移动 else if (ch=='a'||ch=='A'||ch==75&&t) {if (nx>1) nx--;}///按a或左键向左移动 else if (ch=='d'||ch=='D'||ch==77&&t) {if (nx<N)nx++;}///按d或右键向右移动 else if ((ch==32&&t||ch==13&&t)&&m[nx][ny]==-1){_drop(x,nx,ny); return;}///按空格或enter落子 gotoxy(nx,ny);}}

直接上代码

#include<windows.h>
#include<conio.h>
#include<bits/stdc++.h>
using namespace std;
#define Forij(x) for(int i=1;i<=x;i++) for(int j=1;j<=x;j++)
#define N 25 ///棋盘大小
int fx[4][2]={{1,1},{1,0},{0,1},{1,-1}};
int Q,GG;
string C[20]={"●","○","﹢","═","║","╔","╚","╗","╝","·"};///棋盘棋子形状
void color(int a){SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a);}///染色
void gotoxy(int x,int y){COORD pos;pos.X=2*x;pos.Y=y;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);}///标记
struct Gomoku
{int m[50][50],nx,ny;void reset()///更新盘面 {system("cls");memset(m,-1,sizeof(m));color(7);for (int i=1; i<=N; i++){gotoxy(0,i);cout<<C[4]; gotoxy(N+1,i);cout<<C[4];gotoxy(i,0);cout<<C[3]; gotoxy(i,N+1);cout<<C[3];}gotoxy(0,0);cout<<C[5]; gotoxy(0,N+1);cout<<C[6];gotoxy(N+1,0);cout<<C[7]; gotoxy(N+1,N+1);cout<<C[8];color(3);Forij(N){gotoxy(i,j); cout<<C[2];}nx=ny=N/2+1; gotoxy(nx,ny);}void _drop(int x,int i,int j)///落子 {m[i][j]=x;gotoxy(i,j);color(15); cout<<C[x];}int check()///查重,不在有子的地方落子 {Forij(N){for (int Fx=0,tmp,lst,xx,yy; Fx<4; Fx++) if(m[i][j]!=-1){xx=i,yy=j,tmp=0,lst=m[i][j];for (int k=1; k<=5; k++){if (xx>N || yy>N) break;if (m[xx][yy]==(lst^1)){break;}if (m[xx][yy]==lst) tmp++;xx+=fx[Fx][0],yy+=fx[Fx][1];}if (tmp==5){return lst;}}}return -1;}int arnd(int x,int y)///数子 {int cnt=0;for (int i=x-1; i<=x+1; i++) if (i>0 && i<=N)for (int j=y-1; j<=y+1; j++) if (j>0 && j<=N)if (m[i][j]>-1) cnt++;}void get_val(int x,int y,int &val)///算威胁度 {val=0;Forij(N){for (int Fx=0,tmp,tk,xx,yy; Fx<4; Fx++){xx=i,yy=j,tmp=tk=0;for (int k=1; k<=5; k++){if (xx>N || yy>N){tmp=0; break;}if (m[xx][yy]==(x^1)){tmp=0; break;}if (m[xx][yy]==x) tmp++,tk+=(1<<(k-1));xx+=fx[Fx][0],yy+=fx[Fx][1];}switch(tmp){case 5:val+=800000000; break; case 4:val+=1000+350*y; break;case 3:val+=(tk==14)?(300+600*y):(300+200*y); break;case 2:val+=3+2*y; break;case 1:val+=1+y; break;}}}}void AI(int x)///找最佳点 {int best,brnd,bi,bj,v1,v2,kkk;best=-2147483647;brnd=-2147483647;Forij(N) if (m[i][j]==-1){m[i][j]=x;get_val(x,10,v1);get_val(x^1,80,v2);if (v1-v2>best) bi=i,bj=j,best=v1-v2;if (v1-v2==best)if ((kkk=arnd(i,j))>brnd)brnd=kkk,bi=i,bj=j;m[i][j]=-1;}_drop(x,bi,bj);}void HM(int x)///键盘判断 {char ch=getch();bool t=224;///读取键盘返回值 for (;;ch=getch()){if (ch=='w'||ch=='W'||ch==72&&t) {if (ny>1) ny--;}///按w或上键向上移动 else if (ch=='s'||ch=='S'||ch==80&&t) {if (ny<N) ny++;}///按s或下键向下移动 else if (ch=='a'||ch=='A'||ch==75&&t) {if (nx>1) nx--;}///按a或左键向左移动 else if (ch=='d'||ch=='D'||ch==77&&t) {if (nx<N)nx++;}///按d或右键向右移动 else if ((ch==32&&t||ch==13&&t)&&m[nx][ny]==-1){_drop(x,nx,ny); return;}///按空格或enter落子 gotoxy(nx,ny);}}
} A;
int main()
{system("title 五子棋");  ///标题 system("mode con cols=54 lines=27"); ///窗口大小 for (;;){A.reset();for (GG=-1;;){gotoxy(A.nx,A.ny);A.HM(0); GG=A.check(); if (GG>-1) break;A.AI(1); GG=A.check(); if (GG>-1) break;}gotoxy(5,N+3);if (GG==0) {Sleep(2000);cout<<"\a";printf("你侥幸赢了一局!");}///赢场面 if (GG==1) {Sleep(2000);cout<<"\a";printf("YSC的人工智障赢了!");}///输场面 while (kbhit()) getch();Sleep(2000);gotoxy(5,N+3);system("pause"); ///按任意键继续 }
}

自动下五子棋的程序,初级智慧,但还是可以把初学者打的满地找牙相关推荐

  1. Linux下的十个好用的命令工具:查看系统版本,显示目录的大小,查看硬盘HDD/SSD,硬盘测速,ssh时自动输入密码,查看程序的内存使用情况,查看I/O的速度,查看ssh密码错误日志,查找文件

    文章目录 1.查看系统版本 2.显示目录的大小 3.查看硬盘是HDD还是SSD 4.硬盘测速 5.在ssh的时候自动输入密码 6.查看程序的内存使用情况 7.查看I/O的速度 8.查看ssh密码错误日 ...

  2. Jenkins系列:5、wsl下的Jenkins编译Windows下的Qt程序并自动打包成exe

    Jenkins系列:5.wsl下的Jenkins编译Windows下的Qt程序并自动打包成exe 文章目录 Jenkins系列:5.wsl下的Jenkins编译Windows下的Qt程序并自动打包成e ...

  3. eclipse下编写android程序突然不会自动生成R.java文件和包的解决办法

    eclipse下编写android程序突然不会自动生成R.java文件和包的解决办法 我的eclipse原来是好好的,什么问题都没有的,结果今天一打开新建一个android程序,发现工程里不会自动生成 ...

  4. 五子棋对弈程序c语言,求大神说一下五子棋人机对弈的算法,最好有代码 良辰多谢了...

    得分:20 当我们与电脑对战时,您知道这些软件是怎样象人脑一样进行思考的吗?前不久我曾编写过一个五子棋的游戏,在这里就以此为例和大家一起探讨探讨. 总的来说(我们假定您熟悉五子棋的基本规则),要让电脑 ...

  5. 五子棋游戏程序创作过程(C语言)

    五子棋游戏程序创作过程(C语言 ) 我是编程爱好者,对游戏程序编制很感兴趣.学习VB6语言时就编制过一些游戏程序,如独立钻石棋.伤脑筋十二块.连连看.扑克牌游戏等,都是windows标准图形界面的.感 ...

  6. 【python教程入门学习】Python实现自动玩贪吃蛇程序

    这篇文章主要介绍了通过Python实现的简易的自动玩贪吃蛇游戏的小程序,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学一学 实现效果 先看看效果 这比我手动的快多了,而且是单机的,自动玩没惹 ...

  7. Python实现信息自动配对爬虫排版程序(附下载)

    授权自AI科技大本营(ID:rgznai100) 本文约2800字,建议阅读7分钟. 本文为你介绍Python实现信息自动配对爬虫排版程序. 公众号(DatapiTHU)后台回复"20200 ...

  8. 编写五子棋的完整python代码_python实现五子棋小程序

    本文实例为大家分享了python实现五子棋小程序的具体代码,供大家参考,具体内容如下 一.结合书上例子,分三段编写: wuziqi.py #coding:utf-8 from win_notwin i ...

  9. python之用循环实现五子棋小程序

    在python中我们学过流程控制中的循环结构,现在我们来进行一个小应用的练习 本程序是通过循环控制结构来实现五子棋小程序的 游戏规则 五子棋的规则如下: 对局双方各执一色棋子. 空棋盘开局. 黑先.白 ...

最新文章

  1. MyBatis基础入门《九》ResultMap自动匹配
  2. 设备树的引入及简明教程
  3. 如何评价三国里的袁绍
  4. 成功解决AttributeError: 'Word2Vec' object has no attribute 'index2word'
  5. systemd教程推荐
  6. Windows环境变量
  7. tab vue 竖排_vue 实现tab切换保持数据状态
  8. miniui展示日历能点击_2020年日历设计,除了366天有新字体,还有新形式
  9. html前端页面的基本骨架是,web前端入门到实战:css实现的骨架屏方案
  10. [Ext JS] Sencha Cmd命令参考之一
  11. 组合范畴语法 CCG
  12. nginx反向代理/负载均衡MySQL
  13. php如何获取js中的内容_解析PHP中的Javascript提取
  14. [Codeforces]860E Arkady and a Nobody-men
  15. java blowfish ecb,node.js – 使用nodejs crypto和php的mcrypt解密blowfish-ecb
  16. 利用WCF与Android实现图片上传并传参
  17. apache ii评分怎么评_APACHE-II评分表.doc
  18. Java字符流拷贝/复制文本文件,字节流拷贝文本文件乱码,很经典简便
  19. oracle数据库生成流水号,oracle 中生成流水号 步骤
  20. (C语言)教师信息管理系统

热门文章

  1. 运​算​符​的​优​先​级古诗顺口溜记忆法
  2. 【C/C++】如何在VS中显示代码行号
  3. 403 Forbidden (varnish) the provided credentials were incorrect
  4. HTML5期末大作业:商城网站设计——男女装商城-功能齐全(40页) HTML+CSS+JavaScript 大学生网店作品 商城网页设计作业模板 学生网页制作源代码下载
  5. threejs元素周期表-CSS3DRenderer
  6. 魔术中的数学艺术系列讲座(二)——魔术中的数学结构
  7. 【云计算的1024种玩法】自己搭游戏服务器:我的世界Minecraft
  8. python文件内容 替换,Python对指定文件内容进行全局替换
  9. 苹果手机充电口接触不良怎么办_苹果手机充电慢怎么办 这几个问题一定要注意!...
  10. rabbitmq消息ACK确认机制及发送失败处理