您的位置:首页 > 其它

五子棋

2016-01-21 16:22 253 查看
// gobang.c
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>  // for getch()

#define LEN 21
int play1 = 1, play2 = 2;
char chess[LEN][LEN];
unsigned int x = LEN/2, y = LEN/2;      // cursor Point
int count = 0;

void initGame();
void runGame();
void display();
int checkGame(char c);

int main(void)
{
printf("Begin Game , Yes ?");
if(getchar() == '\n'){
initGame();
runGame();
}
return 0;
}

void initGame()
{
int i, j;
for(i = 0; i < LEN; i++){

for(j = 0; j < LEN; j++){
if(i == 0 )
chess[i][j] = 'a' + j-1;
else if(j == 0)
chess[i][j] = 'a' + i-1;
else
chess[i][j] = '.';
chess[0][0] = 0;
}
}
display();
}

void runGame()
{
int input;
while(1){
input = getch();
if(input == 27)     //ESC
exit(0);
else if(input == 0xE0){     // control symbol for direction key
input = getch();
switch(input){
case 0x48:  //up
y == 1 ? y = LEN-1 : y--;
break;
case 0x4B:  //left
x == 1 ? x = LEN-1 : x--;
break;
case 0x4D:  //right
x == LEN-1 ? x = 0 : x++;
break;
case 0x50:  //down
y == LEN-1 ? y = 0 : y++;
break;
}
}
else if(input == ' ' && chess[y][x] == '.'){    // space Laozi
if(++count % 2 == play1){
chess[y][x] = 'O';
if(checkGame('O') == 1){        // check
display();
printf("Play1 with O Win !!!\n");
exit(0);
}
}
else{
chess[y][x] = 'X';
if(checkGame('X') == 1){
display();
printf("Play2 with O Win !!!\n");
exit(0);
}
}
}
display();
}
}

void display()
{
int i, j;
system("cls");
for(i = 0; i < LEN; i++){
for(j = 0; j < LEN; j++){
printf("%-2c", chess[i][j]);
}
printf("\n");
}
if((count+1) % 2 == play1)
printf("\nWhose Turn : Play1  O\t\t");
else
printf("\nWhose Turn : Play2  X\t\t");
printf("P(x, y) = %c, %c\n", x+'a'-1, y+'a'-1);
}

int checkGame(char c)   // check last laozi
{
int i, j, n = 1, stop1 = 0, stop2 = 0;
for(i = 1; i <= 5; i++){        // x
if(stop1 == 0 && x-i > 0 && chess[y][x-i] == c)
n++;
else
stop1 = 1;
if(stop2 == 0 && x+i < LEN && chess[y][x+i] == c)
n++;
else
stop2 = 1;
if (n >= 5)
return 1;
if(stop1 == 1 && stop2 == 1)
break;
}

stop1 = stop2 = 0, n = 1;
for(i = 1; i <= 5; i++){        // y
if(stop1 == 0 && y-i > 0 && chess[y-i][x] == c)
n++;
else
stop1 = 1;
if(stop2 == 0 && y+i < LEN && chess[y+i][x] == c)
n++;
else
stop2 = 1;
if (n >= 5)
return 1;
if(stop1 == 1 && stop2 == 1)
break;
}

stop1 = stop2 = 0, n = 1;
for(i = 1; i <= 5; i++){    //x+1, y+1  --> x-1, y-1
if(stop1 == 0 && x-i > 0 && y-i > 0 && chess[y-i][x-i] == c)
n++;
else
stop1 = 1;
if(stop1 == 0 && x+i < LEN && y+i < LEN && chess[y+i][x+i] == c)
n++;
else
stop2 = 1;
if(n >= 5)
return 1;
if(stop1 == 1 && stop2 == 1)
break;
}

stop1 = stop2 = 0, n = 1;
for(i = 1; i <= 5; i++){    //x+1, y-1  -->  x-1, y+1
if(stop1 == 0 && x+i < LEN && y-i > 0 && chess[y-i][x+i] == c)
n++;
else
stop1 = 1;
if(stop1 == 0 && x-i > 0 && y+i < LEN && chess[y+i][x-i] == c)
n++;
else
stop2 = 1;
if(n >= 5)
return 1;
if(stop1 == 1 && stop2 == 1)
break;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  五子棋