三子棋游戏

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

void chess_board(char arr[3][3])          //打印棋盘
{
   int i = 0;
   int j = 0;
   for (i = 0; i < 3; i++)
   {
       printf( " %c | %c | %c \n", arr [i][0], arr[i][1], arr[i][2]);
       if (i<2)
       printf( "---|---|---\n");
    }
}

int success_or_failure(char arr[3][3])       //判断胜负
{
     int i = 0;
     int j = 0;
     for (i = 0; i < 3; i++)
     {
        if ((arr [i][0] == arr[i][1]) && ( arr[i][j] == arr [i][2]))
          {
              if (arr [i][0] == ‘#‘)
                 return 1;                //用户赢了
              else if (arr[i][0] == ‘0‘)
                  return -1;            //电脑赢了
            }
      }
      for (j = 0; j < 3; j++)
       {
        if ((arr [0][j] == arr[1][j]) && ( arr[1][j] == arr [2][j]))
         {
           if (arr [0][j] == ‘#‘)
              return 1;                 //用户赢了
           else if (arr[0][j] == ‘0‘)
               return -1;               //电脑赢了
          }
       }
        if ((arr [0][0] == arr[1][1]) && ( arr[0][0] == arr [2][2]))
          {
              if (arr [1][1] == ‘#‘)
                  return 1;               //用户赢了
               else if (arr[1][1] == ‘0‘)
                  return -1;             //电脑赢了
          }
        if ((arr [0][2] == arr[1][1]) && ( arr[0][2] == arr [2][0]))
          {
               if (arr [1][1] == ‘#‘)
                   return 1;             //用户赢了
               else if (arr[1][1] == ‘0‘)
                   return -1;           //电脑赢了
          }
        for (i = 0; i < 3; i++)
         {
               for (j = 0; j < 3; j++)
                 {
                     if (arr [i][j] == ‘ ‘)
                          return 0;      //都没赢
                 }
         }
         return -2;                  //平局
}

int user_game(char arr[3][3])                   //用户输入
{
      int x = 0;
       int y = 0;
       while (1)
       {
         printf( "please user input:(x, y) ");
          scanf( "%d%d", &x, &y);
          printf( "\n");
          if ((x<1 && x>3) || (y<1 && y>3))  //判断用户输入的是否合法
          {
            printf( "地址无效,请重新输入\n" );                          
            break;
           }
         if (arr [x - 1][y - 1] == ‘ ‘)    //判断这个位置有没有被占
          {                                                
              arr[x - 1][y - 1] = ‘#‘ ;
              break;
           }
          printf( "地址无效,请重新输入\n" );
      }
      chess_board( arr);
      int ret=success_or_failure(arr );
      return ret;
}

int computer_game(char arr[3][3])                  //电脑输入
{
         printf( "computer input:\n\n");
         int x = 0;
         int y = 0;
         while (1)
           {                 //产生一个没有被棋子占用的位置
             srand(( unsigned)time(NULL ));
             x = rand() % 3;
             srand(( unsigned)time(NULL ));
             y = rand() % 3;
             if (arr [x][y] == ‘ ‘)                                  
             break;
           }
      arr[x][y]= ‘0‘ ;
      chess_board(arr);
      int ret=success_or_failure(arr);
      return ret;
}

void init(char arr[][3])                  //初始化棋盘
{

        for (int i = 0; i < 3; i++)                       
        {
          for (int j = 0; j<3; j++)
            {
               arr[i][j] = ‘ ‘;
             }
        }
}

int main()
{
     printf( "**********************\n");            //打印菜单
     printf( "*******        *******\n");
     printf( "*******1.go   0.exit**\n");
     printf( "*******        *******\n");
     printf( "**********************\n");
     printf( "**********************\n\n\n");
     char arr[3][3];
     while (1)
     {
       init(arr);                       //初始化棋盘
       int count = 0;
       printf( "\nplease choice:1 or 0 : " );
       scanf( "%d", &count);               //选择功能
       if (count == 0)
         {
           exit( EXIT_FAILURE);
           }
      else if (count == 1)
       {
          printf( "\n****游戏开始****\n\n" );
          while (1)
          {   int n1 = user_game(arr);
             {
                if (n1 == 1)
                {
                  printf( "****恭喜玩家赢了****\n" );
                  break;
                }
              }                  
              int n2 = computer_game(arr);                                          
               {      
                   if (n2 == -1)
                   {
                     printf( "****电脑赢了****\n" );
                     break;
                   }
                }
              if ((n1 == -2) || (n2 == -2))                          
              {
                printf( "*****平局******\n" );
                break;
              }
           }
                 printf( "\n再来一局\n\n" );
       }
 return 0;
}
时间: 2024-11-14 12:55:10

三子棋游戏的相关文章

简单的三子棋游戏

简单的三子棋游戏,我能力有限把电脑玩家的走子写的比较简单. #include<stdio.h> void qipan() { printf("_ _|_ _|_ _\n"); printf("_ _|_ _|_ _\n"); printf("_ _|_ _|_ _\n"); } void player_and_pcdo() { int i = 0, j = 0; static char a[3][3] = { ' ', ' ', '

C语言编程 三子棋 游戏

#include<stdio.h> #include<stdlib.h> #include<windows.h> #define amu 3 void menu()//菜单界面 { printf("***********************************************\n"); printf("********** 欢 迎 来 到 三 子 棋 游 戏 *********\n"); printf("

用C语言实现三子棋游戏

1.头文件部分#ifndef _THREE_CHESSH#define _THREE_CHESSH #include<stdio.h>#include<windows.h>#include<string.h>#include<time.h>#pragma warning(disable:4996) #define ROW 3#define COL 3 void ShowUI();void Game();void ComputerMove(char board

一个简单的三子棋游戏(c语言实现)

题目是:在一个3*3大小的矩阵中下棋一方有连续三个子便获胜 代码如下: #include<stdio.h> #include<stdlib.h> #include<time.h>               char arr[3][3] = { 0 };            //直接定义外部变量所有的函数可以直接使用    因为考虑到棋盘大小是固定的 int size = 9;                   //棋盘大小固定  每下一个子都会使可以下子的容量-1

c语言&quot;黑框框&quot;下不忍直视的三子棋实现

今天发一个界面丑到爆,无比Low的三子棋程序 同样,win32 无图形界面 输入坐标进行交互, X代表玩家下子,0代表电脑下子(rand()函数随机产生合法坐标落子),率先连成三子则胜利.棋盘满未连成三子则平局. 程序比较简单直接发源码.三个块,game.h代表程序所需头文件.宏定义.函数声明,test.c代表程序游戏逻辑,game.c代表程序定义函数实现. 代码未优化,尽请见谅. game.h: /* 此头文件包含test.c所需头文件及相关函数声明 */ #ifndef __GAME_H__

企业内训实录:三子棋版阿尔法狗项目及视频面试应用开发

课程下载:https://pan.baidu.com/s/1pPIgDBYiqirDGibxrUWuag 提取码: g9xd 本课程设计三大部分的企业应用:一.数据SQL***的企业防御解决方案(SQLiGoT深入讲解):二.仿AlphaGO的三子棋游戏核心开发技术与模拟实现:三.人工智能视频面试技术 :三个小项目分别属于企业热门经典应用,涉及的技术包括但不限于:SQL.数据库.数据库安全,SVM算法原理.实现及企业真实场景应用.人机对战.前端REACT实现.人工智能相关库的调用.人脸识别算法原

益智趣味小游戏之三子棋

同五子棋,三子棋即在九宫格里能实现三个棋子连在一起即获胜 //未修改写法,实现了功能但是繁琐不美观且有很多不健全的地方 #include<stdio.h> #include<stdlib.h> void init(int arr[][3])//初始化数组 { int i = 0; for (i = 0; i < 3; i++) { printf(" %c | %c | %c ", arr[i][0], arr[i][1], arr[i][2]); if (

写一个三子棋小游戏的感悟

在写之前,我已经把函数的结构设计出来,主要由以下几个函数实现: 1:初始化棋框 2:玩家下棋 3:电脑下棋 4:判断胜负 5:更新棋框 6:主函数 在写的过程中碰到了不能将玩家下的位置放入棋框中,原因是在函数定义过程中没有将二维数组引入, 导致棋框更新不正确,在函数中引用二维数组时,因为c语言编译系统不检查第一维的大小,只要第二维大小相同,形参数组第一维可以与实参不同,因此在函数定义时只需要写int qk(arr[][i]),i为常数,在主函数调用时只需要写qk(arr)即可,因为数组名本身就是

C语言 三子棋 小游戏

//C语言 三子棋 小游戏 //棋盘为3x3大小,电脑棋子 X ,玩家 O : //用命令窗口模拟3子棋,玩家与电脑轮流下,先连成3子判赢:无路可走判平局 #include<stdio.h> #include<string.h> #include<windows.h> int judge_is_moved(char arr[][12], int place); void print_chessboard(char arr[][12])//输出棋盘 { int i = 0