2020年2月27日 星期四

井字遊戲

簡單的井字遊戲,純C硬刻~

程式碼:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

char map[3][3] = {'\0'};
void initializeboard()
{
 int number = 1;
 for (int i = 0; i < 3; i++)
 {
  for (int j = 0; j < 3; j++)
   map[i][j] = ('0'+number++);
 }
}
void printborad()
{
 printf("-------------\n");
 printf("| %c | %c | %c |\n",map[0][0],map[0][1],map[0][2]);
 printf("----+---+---\n");
 printf("| %c | %c | %c |\n", map[1][0], map[1][1], map[1][2]);
 printf("----+---+----\n");
 printf("| %c | %c | %c |\n", map[2][0], map[2][1], map[2][2]);
 printf("-------------\n");
}
void playerturn()
{
 int cmd,correct_input=0;
 char mark='o';
 while (1)
 {
  printf("請選擇編號: ");
  scanf_s("%d", &cmd);
  if (cmd == 1 && map[0][0] == '1')
   map[0][0] = 'o', correct_input = 1;
  else if (cmd == 2 && map[0][1] == '2')
   map[0][1] = 'o', correct_input = 1;
  else if (cmd == 3 && map[0][2] == '3')
   map[0][2] = 'o', correct_input = 1;
  else if (cmd == 4 && map[1][0] == '4')
   map[1][0] = 'o', correct_input = 1;
  else if (cmd == 5 && map[1][1] == '5')
   map[1][1] = 'o', correct_input = 1;
  else if (cmd == 6 && map[1][2] == '6')
   map[1][2] = 'o', correct_input = 1;
  else if (cmd == 7 && map[2][0] == '7')
   map[2][0] = 'o', correct_input = 1;
  else if (cmd == 8 && map[2][1] == '8')
   map[2][1] = 'o', correct_input = 1;
  else if (cmd == 9 && map[2][2] == '9')
   map[2][2] = 'o', correct_input = 1;
  else
   printf("錯誤輸入,請再輸入一次!\n");

  if (correct_input)
   break;
 }
 
}
void computerturn()
{
 int x = rand() % 3, y = rand() % 3,i=0;
 while (map[x][y] == 'o' || map[x][y] == 'x')
 {
  x = rand() % 3, y = rand() % 3;
  i++;
  if (i >= 9)
   return;
 }
 map[x][y] = 'x';
 
}
int winorlose()
{
 // o win
 if (map[0][0] == 'o'&&map[0][1] == 'o'&&map[0][2] == 'o') return 1; //橫向
 if (map[1][0] == 'o'&&map[1][1] == 'o'&&map[1][2] == 'o') return 1;
 if (map[2][0] == 'o'&&map[2][1] == 'o'&&map[2][2] == 'o') return 1;
 if (map[0][0] == 'o'&&map[1][0] == 'o'&&map[2][0] == 'o') return 1; //縱向
 if (map[0][1] == 'o'&&map[1][1] == 'o'&&map[2][1] == 'o') return 1;
 if (map[0][2] == 'o'&&map[1][2] == 'o'&&map[2][2] == 'o') return 1;
 if (map[0][0] == 'o'&&map[1][1] == 'o'&&map[2][2] == 'o') return 1; //斜向
 if (map[0][2] == 'o'&&map[1][1] == 'o'&&map[2][0] == 'o') return 1;
 // x win
 if (map[0][0] == 'x'&&map[0][1] == 'x'&&map[0][2] == 'x') return 2;
 if (map[1][0] == 'x'&&map[1][1] == 'x'&&map[1][2] == 'x') return 2;
 if (map[2][0] == 'x'&&map[2][1] == 'x'&&map[2][2] == 'x') return 2;
 if (map[0][0] == 'x'&&map[1][0] == 'x'&&map[2][0] == 'x') return 2; //縱向
 if (map[0][1] == 'x'&&map[1][1] == 'x'&&map[2][1] == 'x') return 2;
 if (map[0][2] == 'x'&&map[1][2] == 'x'&&map[2][2] == 'x') return 2;
 if (map[0][0] == 'x'&&map[1][1] == 'x'&&map[2][2] == 'x') return 2; //斜向
 if (map[0][2] == 'x'&&map[1][1] == 'x'&&map[2][0] == 'x') return 2;

 int record = 0;
 for (int i = 0; i < 3; i++)
 {
  for (int j = 0; j < 3; j++)
  {
   if (map[i][j] == 'o' || map[i][j] == 'x')
    record++;
  }
 }
 if (record == 9) return 3;

 return 0;
}
int main()
{
 srand(time(NULL));
 printf("\n\n\n");
 printf("\t\t\t~~歡迎來玩 井字遊戲~~\n\n");
 printf("\t\t\t        <規則>\n");
 printf("\t\t\t1.玩家為先手,與電腦對決\n");
 printf("\t\t\t2.先連成一線者獲勝\n\n\n");
 system("pause");
 system("cls");
 initializeboard();

 int result = 0;
 while (1)
 {
  system("cls");
  printborad();
  playerturn();
  if ((result = winorlose()) != 0)
   break;
  computerturn();
  if ((result = winorlose()) != 0)
   break;
 }
 system("cls");
 printborad();
 if (result == 1)
  printf("你贏了~\n");
 else if (result == 2)
  printf("你輸了~\n");
 else if (result == 3)
  printf("平手~\n");
 system("pause");
 return 0;
}

沒有留言:

張貼留言