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;
}

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

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

相关文章
|
7月前
|
Java Android开发
大鱼吃小鱼【小游戏】
大鱼吃小鱼【小游戏】
139 0
|
Python
实现一个2048小游戏
要实现一个2048小游戏,你需要使用Python编程语言和图形用户界面(GUI)库。下面是一个使用Tkinter库来创建2048小游戏的基本步骤
490 3
|
C语言
C/关于扫雷小游戏的创建
C/关于扫雷小游戏的创建
|
7月前
|
小程序 API
微信小程序飞机大战游戏步骤及代码
微信小程序飞机大战游戏步骤及代码
244 0
|
7月前
|
存储 小程序 开发者
微信小程序猜拳游戏步骤及代码
微信小程序猜拳游戏步骤及代码
155 0
10分钟制作一个反弹球小游戏(视频版)
当然它们其实各有利弊,阅读文字效率更高,但是也要求你有更多的注意力和理解力。音视频传递信息效率慢,但是它们更复活人类学习的直觉习惯,通过听觉和视觉来进行模仿。 虽然我个人更喜欢文字,但是我仍然会继续录制视频教程,因为很多内容并不是只给我自己看的,是给很多人看的,而大多数人更倾向于观看视频。
120 0
|
C语言
QAQ的小游戏
QAQ的小游戏
做个不一样的小游戏
,我发布了“微信小游戏实战系列”的第一篇文章,也是我的第一个小游戏正式开始制作的时间,之前它只是一个脑袋中的想法,大概类似于这样:我能不能试着做这样的一系列的游戏呢?它们有着经典的玩法,不会过时,仍然有着很多的受众,如果我把一个经典的小游戏做成一个精品的小游戏,是否是有价值的,甚至能产生商业价值?
167 0
|
存储 移动开发 JavaScript
第15/90步《前端篇》第2章 编写一个简单的HTML5小游戏:打造游戏界面 第6课
今天学习《前端篇》第2章 编写一个简单的HTML5小游戏:打造游戏界面 第6课 绘制分界线,这节课复习一下之前已经练习过的 lineTo、moveTo 方法,在实践中学习 JS 语言在逻辑控制语句、函数、作用域、闭包等方面的基础知识和技能。
93 0
|
移动开发 前端开发 HTML5
第14/90步《前端篇》第2章 编写一个简单的HTML5小游戏:打造游戏界面 第5课
今天学习《前端篇》第2章 编写一个简单的HTML5小游戏:打造游戏界面 第5课 绘制小球,这节课我们将完成圆的绘制。
67 0