C/关于N子棋小游戏的创建

简介: C/关于N子棋小游戏的创建

本文是用C语言写的N子棋小游戏

头文件:

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>
#define H 3//行
#define L 3//列
void blank_borad(char board[H][L], int h, int l);//初始化棋盘
void print(char board[H][L], int h, int l);//打印棋局
void play_game(char board[H][L], int h, int l);//玩家下棋
void computer_game(char board[H][L], int h, int l);//电脑下棋
char is_win(char board[H][L], int h, int l);//判断输赢

函数功能的实现:

#include"game.h"
char is_win(char board[H][L], int h, int l)//判断输赢
{
/*   |   |
  ---|---|---
   |   |
  ---|---|---
   |   |    */
  int jade = 0;
  int i = 0;
  int j = 0;
  //行 -> win
  for (j = 0;j < h;j++)
  {
    jade = 0;
    for (i = 1;i < l;i++)
    {
      if (board[j][0] == board[j][i]
        && board[j][0] != ' ')
      {
        jade++;
      }
    }
    if (jade == l - 1)
    {
      return board[j][0];
    }
  }
  //列 -> win
  for (i = 0;i < l;i++)
  {
    jade = 0;
    for (j = 1;j < h;j++)
    {
      if (board[0][i] == board[j][i]
        && board[0][i] != ' ')
      {
        jade++;
      }
    }
    if (jade == h - 1)
    {
      return board[0][i];
    }
  }
  //左对角线
  jade = 0;
  for (i=1,j=1;(i<h)&&(j<l);i++,j++)
  {
    if ((board[0][0] == board[i][j])
      && (board[0][0] != ' '))
    {
      jade++;
    }
  }
  if (jade == h-1 || jade==l-1)
  {
    return board[0][0];
  }
  //右对角线
  jade = 0;
  for (i=1,j=l-2;(i < h) && (j>=0);i++,j--)
  {
    if ((board[0][l-1] == board[i][j])
      && (board[0][l-1] != ' '))
    {
      jade++;
    }
  }
  if (jade == h-1 || jade == l-1)
  {
    return board[0][l-1];
  }
  //平局
  jade = 0;
  for (j = 0;j < h;j++)
  {
    for (i = 0;i < l;i++)
    {
      if (board[j][i] != ' ')
      {
        jade++;
      }
    }
  }
  if (jade==l*h)
  {
    return 'Z';
  }
}
void computer_game(char board[H][L], int h, int l)//电脑下棋
{
  int i = 0;
  int j = 0;
  printf("电脑下棋:\n");
  while (1)
  {
    i = rand() % h;
    j = rand() % l;
    if (board[i][j] == ' ')
    {
      board[i][j] = '#';
      break;
    }
  }
}
void play_game(char board[H][L], int h, int l)//玩家下棋
{
  int i = 0;
  int j = 0;
  printf("玩家下棋,请输入选择下的棋的坐标:");
  while (1)
  {
    scanf("%d %d", &i, &j);
    //玩家不知道下标从0开始
    i -= 1;
    j -= 1;
    if (board[i][j] == ' ')
    {
      board[i][j] = '*';
      break;
    }
    else
    {
      printf("输入的该坐标非法,请重新输入:");
    }
  }
}
void print(char board[H][L], int h, int l)//打印棋局
{
  /*   |   |
    ---|---|---
     |   |   
    ---|---|---
       |   |    */
  int i = 0;
  int j = 0;
  for (j = 0;j < h;j++)
  {
    for (i = 0;i < l-1;i++)
    {
      printf(" %c |", board[j][i]);
      if (i==l-2)
      {
        printf(" %c \n", board[j][i + 1]);
      }
    }
    if (j < h-1)
    {
      for (i = 0;i < l - 1;i++)
      {
        printf("---|");
        if (i == l - 2)
        {
          printf("---\n");
        }
      }
    }
  }
}
void blank_borad(char board[H][L], int h, int l)//初始化棋盘
{
  int i = 0;
  int j = 0;
  for (i = 0;i < h;i++)
  {
    for (j = 0;j < l;j++)
    {
      board[i][j] = ' ';
    }
  }
}

主函数代码:

#include"game.h"
void menu1();//选择界面
void test();//选择函数
void Game();//三子棋游戏运行函数
void menu2();//再次选择玩游戏函数
void Game()
{
  srand((unsigned int)time(NULL));
  system("cls");
  printf("\t\t\t欢迎来到三子棋游戏!!!\n\n\n");
  char win;
  char board[H][L];
  //初始化棋盘
  blank_borad(board, H, L);
  //打印空白棋局
  print(board, H, L);
  while (1)
  {
    //玩家下棋
    play_game(board, H, L);
    //打印棋局
    print(board, H, L);
    //判断输赢
    win = is_win(board, H, L);
    if (win == '*')
    {
      printf("玩家胜利");
      break;
    }
    else if (win == '#')
    {
      printf("电脑胜利");
      break;
    }
    else if (win == 'Z')
    {
      printf("平局");
      break;
    }
    //电脑下棋
    computer_game(board, H, L);
    //打印棋局
    print(board, H, L);
    //判断输赢
    win = is_win(board, H, L);
    if (win == '*')
    {
      printf("玩家胜利");
      break;
    }
    else if (win == '#')
    {
      printf("电脑胜利");
      break;
    }
    else if (win == 'Z')
    {
      printf("平局");
      break;
    }
  }
}
void test()//选择函数
{
  int choice = 0;
  do
  {
    scanf("%d", &choice);
    switch (choice)
    {
    case 1:
      Game();//三子棋游戏运行函数
      break;
    case 2:
      printf("已退出游戏....\n");
      break;
    default:
      printf("输入错误,请重新选择:");
      break;
    }
    if (choice==1)
    {
      menu2();//再次选择玩游戏函数
    }
  } while (choice != 2);
}
void menu2()//再次选择玩游戏函数
{
  printf("\t您是否再玩一轮三子棋游戏?\n");
  printf("\t 1.play 2.exit\n");
}
void menu1()//选择界面
{
  printf("\t***********************************\n");
  printf("\t********欢迎来到三子棋游戏*********\n");
  printf("\t***** 请选择: 1.play 2.exit ******\n");
  printf("\t***********************************\n");
}
int main()
{
  menu1();//选择界面
  test();//选择函数
  return 0;
}

这篇博客如果对你有帮助,给博主一个免费的点赞以示鼓励,欢迎各位🔎点赞👍评论收藏⭐️,谢谢!!!

如果有什么疑问或不同的见解,欢迎评论区留言哦。

相关文章
|
编解码 前端开发 JavaScript
摄像头web网页播放功能: ffmeg和nginx实现
摄像头web网页播放功能: ffmeg和nginx实现
768 0
|
机器学习/深度学习 供应链 算法
如何从实验中获得更多?——AB实验的异质性分析实践
本文阐述了异质性分析的基本原理和方法、具体实践流程、落地等情况,总结实践经验,也期待更多交流和探讨。
|
存储 缓存 安全
Android14 适配之——现有 App 安装到 Android14 手机上需要注意些什么?
Android14 适配之——现有 App 安装到 Android14 手机上需要注意些什么?
875 0
|
流计算
(文章复现)基于电力系统碳排放流理论的碳排放分摊模型研究
之前写过一篇博客复现论文《电力系统碳排放流的计算方法初探》,那篇文章模型比较简单,没有考虑网损。 今天要复现的这篇文献,考虑了功率损耗,将碳排放在用电负荷、网络损耗以及厂用电之间进行分配,具体原理如下。
|
程序员 API Python
PyQt
PyQt 是一个用于创建桌面应用程序的 Python 库,它提供了大量的 GUI 控件和工具,使 Python 程序员可以快速地开发出具有良好用户界面的应用程序。PyQt 支持两种不同的用户界面风格:Qt4 和 Qt5。PyQt4 是基于 Qt4 库的,而 PyQt5 是基于 Qt5 库的。PyQt5 是目前最先进的版本,推荐使用。 使用 PyQt 开发应用程序的步骤如下:
387 10
|
JavaScript 前端开发 Java
vue-cli-service的命令行参数
在一个 Vue CLI 项目中,@vue/cli-service 安装了一个名为 vue-cli-service 的命令。你可以在 npm scripts 中以 vue-cli-service、或者从终端中以 ./node_modules/.bin/vue-cli-service 访问这个命令
|
API 网络架构 C++
Bito - 超越Copilot的一款神级插件
Bito - 超越Copilot的一款神级插件
334 0
|
存储 API 容器
[ROS通信机制] --- 参数服务器
[ROS通信机制] --- 参数服务器
498 0
[ROS通信机制] --- 参数服务器
|
C语言
牛客网C语言刷题(指针篇)
牛客网C语言刷题(指针篇)
546 0
牛客网C语言刷题(指针篇)
|
域名解析 缓存 网络协议
百度统一socket长连接组件从0到1的技术实践
本文旨在探讨socket长连接技术在移动端的实践,并以iOS端为例,重点分享了百度在实现统一socket长连接组件过程中的技术选型和整体架构设计逻辑。并结合IM即时通讯聊天应用案例,展示长连接组件是如何在移动应用领域为类似业务场景提供解决方案的。
411 0

热门文章

最新文章