dev-C++五子棋
来源:互联网 发布:豫广网络工资有保证吗 编辑:程序博客网 时间:2024/05/17 13:10
学搜索的时候写了练手的。。
/* -------------------------------- * c++ code * * by Lytning 2013/08/01 17:50 * --------------------------------*/#include <iostream>#include <conio.h>#define clr system("cls")#define inside(x,y) ((x>0)&&(y>0)&&(x<16)&&(y<16))using namespace std;int pan[16][16],nums[4],x,y,oldx,oldy;bool isBlack;void instruction(int i){ if(i==1) { cout<<"Dev-C++ 五子棋 - Welcome"<<endl; cout<<"---------------------------"<<endl; cout<<"· 该程序为双人五子棋,无人机对战"<<endl; cout<<"· 输入“S”开始游戏"<<endl; cout<<"· 需要指令控制游戏,输入“?”获取帮助"<<endl; cout<<" powered by Lytning"<<endl; } if(i==2) { cout<<"---------------------------"<<endl; cout<<"Dev-C++ 五子棋 - 指令"<<endl; cout<<"---------------------------"<<endl; cout<<"由于是控制台程序,需要输入指令控制游戏"<<endl; cout<<"指令列表:"<<endl; cout<<"·N(空格)x(空格)y :将棋子下在(x,y)位置。"<<endl; cout<<"棋盘中坐标以16进制显示,输入时请输入10进制坐标。(A=10,F=15)"<<endl; cout<<"·A(空格)指令(空格)n:将棋子下在当前棋子附近n个单位"<<endl; cout<<"指令: R-右侧 L-左侧 U-上方 D-下方"<<endl; cout<<"RD-右下 RU-右上 LD-左下 LU-左上"<<endl; cout<<"例如:A R 1:将棋子下在当前棋子 右侧 1 个单位"<<endl; cout<<" A LD 3:将棋子下在当前棋子左下方 3 个单位"<<endl; cout<<"tips:开局时可随意输入一个n为0的指令在棋盘中央下棋"<<endl; cout<<" 例如: A L 0"<<endl; }}char makech(int n){ if(n<10) return (char)n+48; return (char)n+55;}void print(){ cout<<" "; for(int i=1;i<16;i++) cout<<makech(i)<<" "; cout<<endl<<" ------------------------------"<<endl; for(int i=1;i<16;i++) { for(int j=1;j<16;j++) { if(j==1) cout<<makech(i)<<"| "; switch(pan[i][j]) { case 9: cout<<"- "; break; case 0: cout<<"0 "; break; case 1: cout<<"1 "; break; } } cout<<endl; }}void dfs2(int x,int y,int fx){ int trues=isBlack?1:0; if(pan[x][y]==trues) {nums[fx]++; } else {return;} switch(fx) { case 0: if(inside(x+1,y)) {dfs2(x+1,y,0);} else {return;} break; case 1: if(inside(x,y+1)) {dfs2(x,y+1,1);} else {return;} break; case 2: if(inside(x+1,y+1)) {dfs2(x+1,y+1,2);} else {return;} break; case 3: if(inside(x+1,y-1)) {dfs2(x+1,y-1,3);} else {return;} break; }}void dfs1(int x,int y,int fx)//0 上下 1 左右 2 \ 3/ { int trues=isBlack?1:0; switch(fx) { case 0: if((pan[x-1][y]==trues)&&inside(x-1,y)) { dfs1(x-1,y,0); return; }else { dfs2(x,y,0); } break; case 1: if((pan[x][y-1]==trues)&&inside(x,y-1)) { dfs1(x,y-1,1); return; }else { dfs2(x,y,1); } break; case 2: if((pan[x-1][y-1]==trues)&&inside(x-1,y-1)) { dfs1(x-1,y-1,2); return; }else { dfs2(x,y,2); } break; case 3: if((pan[x-1][y+1]==trues)&&inside(x-1,y+1)) { dfs1(x-1,y+1,3); return; }else { dfs2(x,y,3); } break; }}void resetAll(){ for(int i=1;i<16;i++) for(int j=1;j<16;j++) pan[i][j]=9; x=8; y=8; isBlack=true;}int main(){ instruction(1); resetAll(); while(1) { char t; cin>>t; oldx=x;oldy=y; if(t=='N') { cin>>x>>y; } else if(t=='A') { string act; int num; cin>>act>>num; if(act=="R") y+=num; if(act=="L") y-=num; if(act=="U") x-=num; if(act=="D") x+=num; if(act=="RU") x-=num,y+=num; if(act=="RD") x+=num,y+=num; if(act=="LU") y-=num,x-=num; if(act=="LD") y-=num,x+=num; } else if(t=='S') { print(); continue; } else if(t=='?') { instruction(2); continue; } else if(t=='i') { instruction(3); continue; } else { cout<<"未知指令."<<endl; continue; } if((inside(x,y))&&(pan[x][y]==9) ) { pan[x][y]=(isBlack)?1:0; clr; print(); for(int i=0;i<4;i++) { nums[i]=0; dfs1(x,y,i); if(nums[i]>=5) { string winner=!isBlack?"白棋":"黑棋"; cout<<winner<<"获得胜利!"<<endl<<"是否重新开始?(输入Y/N)"; string temp;cin>>temp; if(temp=="Y") { resetAll(); continue; }else{break;} } } isBlack=!isBlack; continue; }else { cout<<"坐标有误或该处已有棋子。"<<endl; x=oldx;y=oldy; continue; } } return 0;}
0 0
- dev-C++五子棋
- C语言五子棋算法
- 一个五子棋C程序
- 五子棋判断输赢C
- C语言五子棋算法
- C实现的五子棋
- C语言 五子棋-人工智能
- C语言版五子棋
- 五子棋C语言实现
- [C大程]五子棋
- C语言五子棋
- C写五子棋
- C语言五子棋
- c 语言五子棋文章
- 五子棋c语言
- 简易五子棋 c语言
- 五子棋(C语言版)
- 【C++】实现图形界面五子棋
- 导出excel到本地
- 设计模式之内容观察者模式
- 黑马程序员-交通灯管理系统学习日记
- Android--Dialog,Dialog 的几种使用方法
- 第五章作业
- dev-C++五子棋
- 使用GDB调试Android NDK native(C/C++)程序
- SQL Server的日期数据类型
- 服务器优化-切分
- xen-4.04 编译问题
- Android 开发,应用的图标已经换了,运行的时候还是默认的安卓机器人
- DataGridView在Cell编辑状态响应回车键下的KeyPress/KeyDown/KeyUp事件
- 自定义UITableViewCell的样式
- C++ 一个程序兼容冒泡、插入、基数三种排序算法