#include <iostream>
using namespace std;
class 五子棋
{
public:
五子棋(int 行 = 8, int 列 = 8)
{
row = 行;
col = 列;
步数 = 0;
current = true;
棋盘 = new int [行];
for (int i = 0; i < 行; i++)
{
棋盘[i] = new int[列];
memset(棋盘[i], 0, sizeof(int) 列);
}
}
~五子棋()
{
for (int i = 0; i < row; i++)
delete[] 棋盘[i];
delete 棋盘;
}
void 开始游戏()
{
while (true)
{
system("cls");
显示棋盘();
if (current)
cout << "黑方(输入:行 列):";
else
cout << "白方(输入:行 列):";
int x, y;
cin >> x >> y;
if (落子(x, y) == false)
{
cout << "坐标有误请重新输入,";
system("pause");
continue;
}
if (++步数 > row col)
{
cout << "平局!!!!" << endl;
system("pause");
break;
}
if (胜利检查(x, y) == true)
{
system("cls");
显示棋盘();
cout << (current "黑" : "白") << "方胜利!!!!" << endl;
system("pause");
break;
}
current = !current;
}
}
private:
int 棋盘;
int row, col;
bool current;
int 步数;
void 初始化棋盘()
{
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
棋盘[i][j] = 0;
}
}
}
void 显示棋盘()
{
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
//cout << 棋盘[i][j] << ' ';
if (棋盘[i][j] == 0)
cout << 棋盘[i][j] << '\t';
else
{
cout << (棋盘[i][j] == 1 "黑" : "白") << '\t';
}
}
cout << i + 1 << endl;
}
for (int i = 0; i < col; i++)
cout << i + 1 << '\t';
cout << endl;
}
bool 落子(int x, int y)
{
x--;
y--;
if (合法性检查(x, y) == false)
return false;
if (current)
棋盘[x][y] = 1;
else
棋盘[x][y] = 2;
return true;
}
bool 合法性检查(int x, int y, int value = 0)
{
if (x > 8 || x < 0)
return false;
if (y > 8 || y < 0)
return false;
if (棋盘[x][y] != value)
return false;
return true;
}
bool 胜利检查(int x, int y)
{
x--; y--;
return 横向检查(x, y) || 纵向检查(x, y);
}
bool 横向检查(int x, int y)
{
int 连通数 = 1;
int value = (current 1 : 2);
//往左检查
int 列坐标 = y;
while (合法性检查(x, --列坐标, value))
{
连通数++;
if (连通数 >= 5)
return true;
}
//往右检查
列坐标 = y;
while (合法性检查(x, ++列坐标, value))
{
连通数++;
if (连通数 >= 5)
return true;
}
return false;
}
bool 纵向检查(int x, int y)
{
int 连通数 = 1;
int value = (current 1 : 2);
//往上检查
int 行坐标 = x;
while (合法性检查(--行坐标, y, value))
{
连通数++;
if (连通数 >= 5)
return true;
}
//往下检查
行坐标 = x;
while (合法性检查(++行坐标, y, value))
{
连通数++;
if (连通数 >= 5)
return true;
}
return false;
}
};
int main()
{
五子棋 game;
game开始游戏();
}
在小程序云麦克风里面开启。
打开手机,找到并打开手机微信App软件。进入微信主页面,直接下拉页面,出现小程序窗口。直接在搜索栏输入“欢乐五子棋”。点击进入“欢乐五子棋腾讯版”。加载小程序,点击“开始游戏”。
我有个简单的思路: 先定义一条线上棋子的各种布局,比如初步定义长度为五个子 ◎◎◎◎● ◎◎●◎× ◎●◎×× ◎×◎×◎ 等等。白圈是自己的子,黑圈是对方的子,叉子是未走的格子。 程序里有个布局表,再定义各个布局的分数,比如连五最99分,连三30分等等。
#include "iostream"
#include <iomanip>
using namespace std;
const int M=20;
const int N=20;
int main()
{
char weizhi[M][N];
int k,i,j,x,y,flag=0;
cout<<"欢迎使用简易双人对战五子棋游戏"<<endl;
cout<<"五子棋棋谱如下:"<<endl;
for(k=0;k<=N;k++)
cout<<setw(3)<<setfill(' ')<<k;
cout<<endl;
for(i=1;i<=M;i++)
{
cout<<setw(3)<<setfill(' ')<<i;
for(j=1;j<=N;j++)
{
weizhi[i][j]='-';
cout<<setw(3)<<setfill(' ')<<weizhi[i][j];
}
cout<<endl;
}
while(flag==0)
{
//红方落子
cout<<"请红方输入落子位置:"<<endl;
loop1:
cout<<"请输入落子的行数:";
cin>>x;
cout<<"请输入落子的列数:";
cin>>y;
if(weizhi[x][y]=='-')
{
weizhi[x][y]='';
for(k=0;k<=N;k++)
cout<<setw(3)<<setfill(' ')<<k;
cout<<endl;
for(i=1;i<=M;i++)
{
cout<<setw(3)<<setfill(' ')<<i;
for(j=1;j<=N;j++)
cout<<setw(3)<<setfill(' ')<<weizhi[i][j];
cout<<endl;
}
}
else
{
cout<<"你不能在这落子,请重新选择落子位置:"<<endl;
goto loop1;
}
//判断胜利
for(i=1;i<=M-4;i++)
{
for(j=1;j<=N-4;j++)
{
if(weizhi[i][j]=='' && weizhi[i][j+1]=='' && weizhi[i][j+2]=='' && weizhi[i][j+3]=='' && weizhi[i][j+4]=='')
{
cout<<"恭喜红方获得简易双人对战五子棋的胜利!耶~~~"<<endl;
flag=1;
break;
}
if(weizhi[i][j]=='' && weizhi[i+1][j]=='' && weizhi[i+2][j]=='' && weizhi[i+3][j]=='' && weizhi[i+4][j]=='')
{
cout<<"恭喜红方获得简易双人对战五子棋的胜利!耶~~~"<<endl;
flag=1;
break;
}
if(weizhi[i][j]=='' && weizhi[i+1][j+1]=='' && weizhi[i+2][j+2]=='' && weizhi[i+3][j+3]=='' && weizhi[i+4][j+4]=='')
{
cout<<"恭喜红方获得简易双人对战五子棋的胜利!耶~~~"<<endl;
flag=1;
break;
}
if(flag==1)
break;
}
}
//蓝方落子
cout<<"请蓝方输入落子位置:"<<endl;
loop2:
cout<<"请输入落子的行数:";
cin>>x;
cout<<"请输入落子的列数:";
cin>>y;
if(weizhi[x][y]=='-')
{
weizhi[x][y]='#';
for(k=0;k<=N;k++)
cout<<setw(3)<<setfill(' ')<<k;
cout<<endl;
for(i=1;i<=M;i++)
{
cout<<setw(3)<<setfill(' ')<<i;
for(j=1;j<=N;j++)
cout<<setw(3)<<setfill(' ')<<weizhi[i][j];
cout<<endl;
}
}
else
{
cout<<"你不能在这落子,请重新选择落子位置:";
goto loop2;
}
//判断胜利
for(i=1;i<=M-4;i++)
{
for(j=1;j<=N-4;j++)
{
if(weizhi[i][j]=='#' && weizhi[i][j+1]=='#' && weizhi[i][j+2]=='#' && weizhi[i][j+3]=='#' && weizhi[i][j+4]=='#')
{
cout<<"恭喜蓝方获得简易双人对战五子棋的胜利!耶~~~"<<endl;
flag=1;
break;
}
if(weizhi[i][j]=='#' && weizhi[i+1][j]=='#' && weizhi[i+2][j]=='#' && weizhi[i+3][j]=='#' && weizhi[i+4][j]=='#')
{
cout<<"恭喜蓝方获得简易双人对战五子棋的胜利!耶~~~"<<endl;
flag=1;
break;
}
if(weizhi[i][j]=='#' && weizhi[i+1][j+1]=='#' && weizhi[i+2][j+2]=='#' && weizhi[i+3][j+3]=='#' && weizhi[i+4][j+4]=='#')
{
cout<<"恭喜蓝方获得简易双人对战五子棋的胜利!耶~~~"<<endl;
flag=1;
break;
}
if(flag==1)
break;
}
}
}
return 0;
}
我运行过,没有错误
我给你一个c++五子棋的程序miancpp#include <cstdio>
#include <string>
#include <cstdlib>
#include <ctime>
#include <Windowsh>
#include "plh"
using namespace std;pl game;
pl game2;void srandput(int &x,int &y) {
srand(time(NULL));
do {
x = rand() % 20;
y = rand() % 20;
} while (!gameisok(x,y));
}void scanfput(int &x,int &y) {
do {
scanf("%d %d",&x,&y);
} while (!gameisok(x,y));
}int main() {
int x,y;
char who = com;
x = y = -1;
do {
if (who == com) who = me;
else who = com;
if (who == me) {
gamegetxy(x,y);
printf("Com put chess in (%d,%d)\n",x,y);
gameprintmap();
if (gameisend(x,y,com)) {
who = com;
break;
} gamesendxy(x,y);
printf("I put chess in (%d,%d)\n",x,y);
gameprintmap();
if (gameisend(x,y,me)) break;
//system("pause");
}
else {
//srandput(x,y);
scanfput(x,y);
//game2getxy(x,y);
//game2sendxy(x,y);
}
} while (true);
if (who == me) {
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),dwMe);
puts("You Win, Computer Lose");
}
else {
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),dwCom);
puts("Computer Win, You Lose");
}
printf("Use %d Steps\n",gamegetstep());
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),dwWhite);
} pihconst DWORD dwWhite = FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_GREEN;
const DWORD dwMe = FOREGROUND_GREEN;
const DWORD dwCom = FOREGROUND_RED;
//■□○●
char rec1[] = {-95,-10,0};
char rec2[] = {-95,-11,0};
char cir1[] = {-95,-16,0};
char cir2[] = {-95,-15,0};
//////////////////////////////////////////////////////////////////////////
//class pl
//////////////////////////////////////////////////////////////////////////
const int NMAX = 20;
const int MAX = 1200;
const char blank = '0';
const char me = '1';
const char com = '2';class pl {
public:
void sendxy(int &,int &);
void getxy(int,int);
void initscore();
void refreshscore(char,int,int);
void calscore(char);
void solve(int &,int &);
void printmap();
bool isok(int,int);
bool isend(int,int,char);
int getstep();
pl();
private:
int usestep;
int wincount;
char chess[NMAX][NMAX];
int win[2][MAX];
//ps,pt -> me
//cs,ct -> com
int ps[NMAX][NMAX],
cs[NMAX][NMAX];
bool pt[NMAX][NMAX][MAX],
ct[NMAX][NMAX][MAX];
};pl::pl() {
memset(chess,blank,sizeof(chess));
memset(pt,false,sizeof(pt));
memset(ct,false,sizeof(ct));
memset(win,0,sizeof(win));
wincount = 0;
usestep = 0;
initscore();
}void pl::printmap() {
int i,j; for (i=0;i<NMAX;i++) {
printf("\t\t\t%d\t",i);
for (j=0;j<NMAX;j++) {
if (chess[i][j] == me) {
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),dwMe);
printf("%s",cir2);
}
else if (chess[i][j] == com) {
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),dwCom);
printf("%s",cir2);
}
else printf("%s",rec2);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),dwWhite);
}
putchar('\n');
}
printf("\n\t\t\t\t");
for (i=0;i<NMAX;i++) printf("%2d",i);
putchar('\n');
}void pl::getxy(int x,int y) {
if (x==-1 && y==-1) return;
refreshscore(com,x,y);
}bool pl::isok(int x,int y) {
return (chess[x][y] == blank);
}bool pl::isend(int x,int y,char who) {
int i,j;
int l,r,u,d,c1,c2,c3,c4;
if (x==-1 && y==-1) return false;
l = r = u = d = 0;
c1 = c2 = c3 = c4 = 0;
for (i=1;i<5 && x+i < NMAX;i++) {
if (who == chess[x+i][y]) u ++;
else break;
}
for (i=1;i<5 && x-i >= 0;i++) {
if (who == chess[x-i][y]) d ++;
else break;
}
for (i=1;i<5 && y+i < NMAX;i++) {
if (who == chess[x][y+i]) r ++;
else break;
}
for (i=1;i<5 && y-i >= 0;i++) {
if (who == chess[x][y-i]) l ++;
else break;
}
for (i=1;i<5 && x+i < NMAX && y+i < NMAX;i++) {
if (who == chess[x+i][y+i]) c1 ++;
else break;
}
for (i=1;i<5 && x+i < NMAX && y-i >= 0;i++) {
if (who == chess[x+i][y-i]) c2 ++;
else break;
}
for (i=1;i<5 && x-i >= 0 && y-i >= 0;i++) {
if (who == chess[x-i][y-i]) c3 ++;
else break;
}
for (i=1;i<5 && x-i >= 0 && y+i < NMAX;i++) {
if (who == chess[x-i][y+i]) c4 ++;
else break;
}
return ( (u+1+d)>=5 || (l+1+r)>=5 || (c1+1+c3)>=5 || (c2+1+c4)>=5 );
}void pl::sendxy(int &x, int &y) {
solve(x,y);
usestep ++;
}//枚举赢的局面
void pl::initscore() {
int i,j,k;
//竖
for (i=0;i<NMAX;i++) {
for (j=0;j<NMAX-4;j++) {
for (k=0;k<5;k++) pt[j+k][i][wincount] = ct[j+k][i][wincount] = true;
wincount ++;
}
}
//横
for (i=0;i<NMAX;i++) {
for (j=0;j<NMAX-4;j++) {
for (k=0;k<5;k++) pt[i][j+k][wincount] = ct[i][j+k][wincount] = true;
wincount ++;
}
}
//斜1
for (i=0;i<NMAX-4;i++) {
for (j=0;j<NMAX-4;j++) {
for (k=0;k<5;k++) pt[j+k][i+k][wincount] = ct[j+k][i+k][wincount] = true;
wincount ++;
}
}
//斜2
for (i=0;i<NMAX-4;i++) {
for (j=NMAX-1;j>=4;j--) {
for (k=0;k<5;k++) pt[j-k][i+k][wincount] = ct[j-k][i+k][wincount] = true;
wincount ++;
}
}
}//计算全局位置的分值
void pl::calscore(char who) {
bool (table)[NMAX][MAX];
int (score)[NMAX];
int iwho;
if (who == me) {
table = pt;
score = ps;
iwho = 1;
}
else {
table = ct;
score = cs;
iwho = 0;
}
srand(time(NULL));
int i,j,k;
for (i=0;i<NMAX;i++) {
for (j=0;j<NMAX;j++) {
score[i][j] = 0;
if (chess[i][j] == blank) {
for (k=0;k<wincount;k++) {
if (!table[i][j][k]) continue;
//分值的大小影响棋子位置的选择
srand(rand());
switch (win[iwho][k]) {
case 1:
score[i][j] += 1;
break;
case 2:
score[i][j] += 10;
break;
case 3:
score[i][j] += 100;
break;
case 4:
score[i][j] += 1000;
}
}
}
}
}
}void pl::solve(int &x, int &y) {
calscore(me);
calscore(com);
int i,j;
int me_score,com_score;
int me_x,me_y,com_x,com_y;
me_score = com_score = -1;
//选取我方或对方得分最大值
for (i=0;i<NMAX;i++) {
for (j=0;j<NMAX;j++) {
if (chess[i][j] == blank) {
if (me_score < ps[i][j]) {
me_score = ps[i][j];
me_x = i;
me_y = j;
}
if (com_score < cs[i][j]) {
com_score = cs[i][j];
com_x = i;
com_y = j;
}
}
}
}
if (me_score > com_score) {
x = me_x;
y = me_y;
}
else {
x = com_x;
y = com_y;
}
refreshscore(me,x,y);
}//更新分数
void pl::refreshscore(char who,int x,int y) {
bool (table)[NMAX][MAX];
bool (antitable)[NMAX][MAX];
int iwho;
if (who == me) {
table = pt;
antitable = ct;
iwho = 1;
}
else {
table = ct;
antitable = pt;
iwho = 0;
}
chess[x][y] = who;
for (int i=0;i<wincount;i++) {
//一方位置能胜利次数
if (table[x][y][i] && win[iwho][i] < INT_MAX) win[iwho][i] ++;
if (antitable[x][y][i]) {
//另一方无法放置
antitable[x][y][i] = false;
win[1-iwho][i] = INT_MAX;
}
}
}int pl::getstep() {
return usestep;
}
五子棋C语言代码如下:
#include <stdioh>
#include <biosh>
#include <ctypeh>
#include <conioh>
#include <dosh>
#define CROSSRU 0xbf /右上角点/
#define CROSSLU 0xda /左上角点/
#define CROSSLD 0xc0 /左下角点/
#define CROSSRD 0xd9 /右下角点/
#define CROSSL 0xc3 /左边/
#define CROSSR 0xb4 /右边/
#define CROSSU 0xc2 /上边/
#define CROSSD 0xc1 /下边/
#define CROSS 0xc5 /十字交叉点/
/定义棋盘左上角点在屏幕上的位置/
#define MAPXOFT 5
#define MAPYOFT 2
/定义1号玩家的 *** 作键键码/
#define PLAY1UP 0x1157/上移--'W'/
#define PLAY1DOWN 0x1f53/下移--'S'/
#define PLAY1LEFT 0x1e41/左移--'A'/
#define PLAY1RIGHT 0x2044/右移--'D'/
#define PLAY1DO 0x3920/落子--空格键/
/定义2号玩家的 *** 作键键码/
#define PLAY2UP 0x4800/上移--方向键up/
#define PLAY2DOWN 0x5000/下移--方向键down/
#define PLAY2LEFT 0x4b00/左移--方向键left/
#define PLAY2RIGHT 0x4d00/右移--方向键right/
#define PLAY2DO 0x1c0d/落子--回车键Enter/
/若想在游戏中途退出, 可按 Esc 键/
#define ESCAPE 0x011b
/定义棋盘上交叉点的状态, 即该点有无棋子 /
/若有棋子, 还应能指出是哪个玩家的棋子 /
#define CHESSNULL 0 /没有棋子/
#define CHESS1 'O'/一号玩家的棋子/
#define CHESS2 'X'/二号玩家的棋子/
/定义按键类别/
#define KEYEX99v 0/退出键/
#define KEYFALLCHESS 1/落子键/
#define KEYMOVECURSOR 2/光标移动键/
#define KEYINVALID 3/无效键/
/定义符号常量: 真, 假 --- 真为1, 假为0 /
#define TRUE 1
#define FALSE 0
//
/ 定义数据结构 /
/棋盘交叉点坐标的数据结构/
struct point
{
int x,y;
};
或者下面这个:
#include <graphicsh>
#include <stdlibh>
#include <stdioh>
#include <conioh>
#define N 15
#define B 7
#define STOP -10000
#define OK 1
#define NO 0
#define UP 328
#define DOWN 336
#define LEFT 331
#define RIGHT 333
int a[N+1][N+1];
int zx,zy;
int write=1,biaoji=0;
struct zn{
long sum;
int y;
int x;
}w[N+1][N+1],max,max1;
void cbar(int i,int x,int y,int r);
void map(int a[][]);
int getkey();
int key();
void zuobiao(int x,int y,int i);
int tu(int a[][],int write);
int wtu(int a[][],int write);
int zhineng(int a[][]);
int zh5(int y,int x,int a[][]);
long zzh5(int b[][],int i);
main()
{
int i,j;
int gdriver=DETECT;
int gmode;
initgraph(&gdriver,&gmode,"");
zx=(N+1)/2;
zy=(N+1)/2;
for(i=1;i<=N;i++)
for(j=1;j<=N;j++)
a[i][j]=0;
map(a);
i=1;
while(i)
{
int k,n;
k=wtu(a,write);
if(k==STOP) goto end;
map(a);
n=zhineng(a);
if(n==STOP) goto end;
map(a);
}
end:
;
}
int zhineng(int a[N+1][N+1])
{
int i,j;
int k;
maxsum=-1;
for(i=0;i<=N;i++)
for(j=0;j<+N;j++)
{
w[i][j]sum=0;
w[i][j]x=i;
w[i][j]y=j;
}
for(i=1;i<=N-4;i++)
for(j=1;j<=N-4;j++)
{
k=zh5(i,j,a);
if(k==STOP) return (STOP);
}
for(i=1;i<=N;i++)
for(j=1;j<=N;j++)
{
if(maxsum<w[i][j]sum)
{
maxsum=w[i][j]sum;
maxy=i;
maxx=j;
}
else if(maxsum==w[i][j]sum)
{
if(((maxy-zy)(maxy-zy)+(maxx-zx)(maxx-zx))>((i-zy)(i-zy)+(j-zx)(j-zx)))
maxsum=w[i][j]sum;
maxy=i;
maxx=j;
}
}
if(a[maxy][maxx]==0)
{
a[maxy][maxx]=-1;
zy=maxy;
zx=maxx;
}
}
int zh5(int y,int x,int a[N+1][N+1])
{
int i,j;
int b[6][6];
long c[13];
long d[6][6];
long temp;
for(i=y;i<=y+4;i++)
for(j=x;j<=x+4;j++)
b[i+1-y][j+1-x]=a[i][j];
c[1]=b[1][1]+b[1][2]+b[1][3]+b[1][4]+b[1][5];
c[2]=b[2][1]+b[2][2]+b[2][3]+b[2][4]+b[2][5];
c[3]=b[3][1]+b[3][2]+b[3][3]+b[3][4]+b[3][5];
c[4]=b[4][1]+b[4][2]+b[4][3]+b[4][4]+b[4][5];
c[5]=b[5][1]+b[5][2]+b[5][3]+b[5][4]+b[5][5];
c[6]=b[1][1]+b[2][1]+b[3][1]+b[4][1]+b[5][1];
c[7]=b[1][2]+b[2][2]+b[3][2]+b[4][2]+b[5][2];
c[8]=b[1][3]+b[2][3]+b[3][3]+b[4][3]+b[5][3];
c[9]=b[1][4]+b[2][4]+b[3][4]+b[4][4]+b[5][4];
c[10]=b[1][5]+b[2][5]+b[3][5]+b[4][5]+b[5][5];
c[11]=b[1][1]+b[2][2]+b[3][3]+b[4][4]+b[5][5];
c[12]=b[1][5]+b[2][4]+b[3][3]+b[4][2]+b[5][1];
for(i=1;i<=12;i++)
{
switch(c[i])
{
case 5:biaoji=1;return(STOP);
case -5:biaoji=-1;return(STOP);
case -4:c[i]=100000;break;
case 4:c[i]=100000;break;
case -3:c[i]=150;break;
case 3:c[i]=150;break;
case -2:c[i]=120;break;
case 2:c[i]=100;break;
case -1:c[i]=1;break;
case 1:c[i]=1;break;
default: c[i]=0;
}
}
for(i=1;i<=12;i++)
{
if(c[i]==150)
c[i]+=zzh5(b,i);
}
for(i=1;i<=5;i++)
for(j=1;j<=5;j++)
d[i][j]=0;
for(i=1;i<=5;i++)
for(j=1;j<=5;j++)
{
if(i==j) d[i][j]+=c[11];
if((i+j)==6) d[i][j]+=c[12];
d[i][j]+=c[i]+c[j+5];
}
for(i=1;i<=5;i++)
for(j=1;j<=5;j++)
{
if(b[i][j]!=0)
d[i][j]=-2;
}
max1sum=-1;
max1y=0;
max1x=0;
for(i=1;i<=5;i++)
for(j=1;j<=5;j++)
{
if(max1sum<d[i][j])
{
max1sum=d[i][j];
max1y=i;
max1x=j;
w[i+y-1][j+x-1]sum+=max1sum;
}
else if(max1sum==d[i][j])
{
if(((i+y-1-zy)(i+y-1-zy)+(j+x-1-zx)(j+x-1-zx))>((max1y+y-1-zy)(max1y+y-1-zy)+(max1x+x-1-zx)(max1x+x-1-zx)))
{
max1sum=d[i][j];
max1y=i;
max1x=j;
}
}
}
}
long zzh5(int b[6][6],int n)
{
int i,j,k,l,m;
switch(n)
{
case 1:i=b[1][1];j=b[1][2];k=b[1][3];l=b[1][4];m=b[1][5];break;
case 2:i=b[2][1];j=b[2][2];k=b[2][3];l=b[2][4];m=b[2][5];break;
case 3:i=b[3][1];j=b[3][2];k=b[3][3];l=b[3][4];m=b[3][5];break;
case 4:i=b[4][1];j=b[4][2];k=b[4][3];l=b[4][4];m=b[4][5];break;
case 5:i=b[5][1];j=b[5][2];k=b[5][3];l=b[5][4];m=b[5][5];break;
case 6:i=b[1][1];j=b[2][1];k=b[3][1];l=b[4][1];m=b[5][1];break;
case 7:i=b[1][2];j=b[2][2];k=b[3][2];l=b[4][2];m=b[5][2];break;
case 8:i=b[1][3];j=b[2][3];k=b[3][3];l=b[4][3];m=b[5][3];break;
case 9:i=b[1][4];j=b[2][4];k=b[3][4];l=b[4][4];m=b[5][4];break;
case 10:i=b[1][5];j=b[2][5];k=b[3][5];l=b[4][5];m=b[5][5];break;
case 11:i=b[1][1];j=b[2][2];k=b[3][3];l=b[4][4];m=b[5][5];break;
case 12:i=b[1][5];j=b[2][4];k=b[3][3];l=b[4][2];m=b[5][1];break;
}
if((i==0&&j==1&&k==1&&l==1&&m==0))
return (900);
if((i==0&&j==-1&&k==-1&&l==-1&&m==0))
return(1000);
if((i==0&&j==0&&k==1&&l==1&&m==1)||(i==1&&j==1&&k==1&&l==0&&m==0))
return(20);
if((i==0&&j==0&&k==-1&&l==-1&&m==-1)||(i==-1&&j==-1&&k==-1&&l==0&&m==0))
return(20);
if((i==-1&&j==1&&k==1&&l==1&&m==1)||(i==1&&j==-1&&k==1&&l==1&&m==1)||(i==1&&j==1&&k==-1&&l==1&&m==1)||(i==1&&j==1&&k==1&&l==-1&&m==1)||(i==1&&j==1&&k==1&&l==1&&m==-1))
return(-60);
if((i==1&&j==-1&&k==-1&&l==-1&&m==-1)||(i==-1&&j==1&&k==-1&&l==-1&&m==-1)||(i==-1&&j==1&&k==-1&&l==-1&&m==-1)||(i==-1&&j==-1&&k==-1&&l==1&&m==-1)||(i==-1&&j==-1&&k==-1&&l==-1&&m==1))
return(-60);
}
int wtu(int a[N+1][N+1],int write)
{
int i=1;
map(a);
zuobiao(zx,zy,1);
while(i)
{
int k;
k=tu(a,write);
if(k==OK) i=0;
if(k==STOP) return (STOP);
}
}
int getkey()
{
int key,lo,hi;
key=bioskey(0);
lo=key&0x00ff;
hi=(key&0xff00)>>8;
return((lo==0) hi+256:lo);
}
int key()
{
int k;
k=getkey();
switch(k)
{
case 27: return (STOP);
case 13:
case ' ': return (OK);
case 328: return (UP);
case 336: return (DOWN);
case 331: return (LEFT);
case 333: return (RIGHT);
default: return (NO);
}
}
void zuobiao(int x,int y,int i)
{
int r;
if(i!=0)
{
setcolor(GREEN);
for(r=1;r<=5;r++)
circle(75+25x,25+25y,r);
}
else
{
if(a[zy][zx]==1)
{
setcolor(8);
for(r=1;r<=5;r++)
circle(75+25x,25+25y,r);
}
else if(a[zy][zx]==-1)
{
setcolor(WHITE);
for(r=1;r<=5;r++)
circle(75+25x,25+25y,r);
}
else
{
setcolor(B);
for(r=1;r<=5;r++)
circle(75+25x,25+25y,r);
setcolor(RED); line(75+25zx-5,25+25zy,75+25x+5,25+25zy);
line(75+25zx,25+25zy-5,75+25zx,25+25zy+5);
}
}
}
int tu(int a[N+1][N+1],int write)
{
int k;
re:
k=key();
if(k==OK)
{
if(a[zy][zx]==0)
{
a[zy][zx]=write;
}
else
goto re;
}
if(k==STOP) return(STOP);
if(k==NO) goto re;
if(k==UP)
{
int i,j;
if(zy==1) j=zy;
else j=zy-1;
zuobiao(zx,zy,0);
zuobiao(zx,j,1);
zy=j;
goto re;
}
if(k==DOWN)
{
int i,j;
if(zy==N) j=zy;
else j=zy+1;
zuobiao(zx,zy,0);
zuobiao(zx,j,1);
zy=j;
goto re;
}
if(k==LEFT)
{
int i,j;
if(zx==1) i=zx;
else i=zx-1;
zuobiao(zx,zy,0);
zuobiao(i,zy,1);
zx=i;
goto re;
}
if(k==RIGHT)
{
int i,j;
if(zx==N) i=zx;
else i=zx+1;
zuobiao(zx,zy,0);
zuobiao(i,zy,1);
zx=i;
goto re;
}
}
void cbar(int i,int x,int y,int r)
{
if(i!=0)
{
if(i==1)
setcolor(8);
else if(i==-1)
setcolor(WHITE);
for(i=1;i<=r;i++)
{
circle(x,y,i);
}
}
}
void map(int a[N+1][N+1])
{
int i,j;
cleardevice();
setbkcolor(B);
setcolor(RED);
for(i=0;i<N;i++)
{
line(100,50+25i,75+N25,50+25i);
line(100+25i,50,100+25i,25+N25);
}
for(i=1;i<=N;i++)
for(j=1;j<=N;j++)
cbar(a[i][j],75+25j,25+25i,10);
}
以上就是关于c++求一个五子棋程序 二维数组构成棋盘 横竖5字分出胜负,不用斜的 通过输入横纵坐标来确定棋的位置全部的内容,包括:c++求一个五子棋程序 二维数组构成棋盘 横竖5字分出胜负,不用斜的 通过输入横纵坐标来确定棋的位置、微信小程序五子棋怎么开麦、求五子棋C语言AI算法(原创思路)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)