【原創】【程式小遊戲】平面四子棋 C++
阿新 • • 發佈:2019-01-26
平面四子棋
事先宣告:
程式碼是我自個兒寫的,規則不是我發明的~~~~。
我覺得我真是太不務正業了!
規則
在一個7*12的棋盤裡,下四子棋。只不過,這個棋盤是豎立著的,它的棋子是從上往下掉的。
比如說:
如果該紅棋走了,我可以這麼走:
然後紅棋就會掉落,落在它下面那顆藍棋的上面。
下一步就該藍棋走,然後紅棋……以此類推,誰先四個同色的棋子連成一條線,就獲勝。
程式碼
話不多說,詳見程式碼:
#include<cstdio>
#include<windows.h>
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<conio.h>
using namespace std;
char map[25][25];
void init_map()
{
for(int j=1;j<=12;j++) map[0][j]=' ';
for(int i=1;i<=7;i++)
for(int j=1;j<=12;j++)
map[i][j]='O';
}
struct Player
{
char o;
}p[3];
void init_player()
{
p[1 ].o='A'; p[2].o='B';
}
int cnt;
void out_map()
{
system("cls");
for(int i=0;i<=7;i++)
for(int j=1;j<=12;j++)
{
cout<<map[i][j];
if(j==12) cout<<endl;
}
}
int drx[9]={0,1,-1,0,0,1,-1,1,-1};
int dry[9]={0,0,0,1,-1,1,-1,-1,1};
int check()
{
for (int i=1;i<=7;i++)
for(int j=1;j<=12;j++)
if(map[i][j]!='O')
{
int cnt,x,y;
for(int p=1;p<=8;p++)
{
cnt=0;
x=i; y=j;
for(int m=1;m<=4;m++)
{
x+=drx[p],y+=dry[p];
if(map[x][y]==map[i][j]) cnt++;
else break;
}
if(cnt==3)
{
x=i; y=j;
for(int m=1;m<=4;m++)
{
map[x][y]='*';
x+=drx[p],y+=dry[p];
out_map();
Sleep(150);
}
if(map[i][j]=='B') return 1;
else return 2;
}
}
}
return 0;
}
void won(int s)
{
char c;
if(s==1) c='B';
else c='A';
printf("Player %c has won the game !!!!\n",c);
}
int winer,round;
void godown(int y,char o)
{
int x=1;
while(map[x][y]=='O' and x<=7)
{
map[x][y]=o;
out_map();
Sleep(150);
map[x][y]='O';
x++;
}
x--;
map[x][y]=o;
out_map();
}
int bx=0,by=0;
void play(int round)
{
int k=round%2+1;
char c=getch(),o=p[k].o;
map[bx][by]='*';
out_map();
while(1)
{
if(c=='A' or c=='a' or c=='D' or c=='d')
{
map[bx][by]=' ';
if(c=='A' or c=='a') by--;
else by++;
if(by<=0 or by>12)
{
if(c=='A' or c=='a') by++;
else by--;
c=getch();
continue;
}
map[bx][by]='*';
out_map();
}
else
{
godown(by,o);
break;
}
c=getch();
}
}
int main()
{
init_map();
init_player();
out_map();
puts("\nHave fun playing! Made by C20182030.");
puts("Press any key to start :");
char c=getch();
while(1)
{
winer=check();
if(winer)
{
won(winer);
c=getch();
break;
}
for(int j=1;j<=12;j++) map[0][j]=' ';
round++;
play(round);
}
}