c++求一个五子棋程序 二维数组构成棋盘 横竖5字分出胜负,不用斜的 通过输入横纵坐标来确定棋的位置

c++求一个五子棋程序 二维数组构成棋盘 横竖5字分出胜负,不用斜的 通过输入横纵坐标来确定棋的位置,第1张

#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算法(原创思路)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/9381319.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存