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
前端实现俄罗斯方块游戏(内含源码)
前端实现俄罗斯方块游戏(内含源码)
195 2
|
3月前
【Qt项目专栏】贪吃蛇小游戏1.0
【Qt项目专栏】贪吃蛇小游戏1.0
86 5
|
5月前
|
开发者 Python
小游戏实战丨基于Tkinter的五子棋小游戏
小游戏实战丨基于Tkinter的五子棋小游戏
76 4
|
C语言
C/关于扫雷小游戏的创建
C/关于扫雷小游戏的创建
|
6月前
|
存储 小程序 开发者
微信小程序猜拳游戏步骤及代码
微信小程序猜拳游戏步骤及代码
144 0
|
6月前
|
小程序 API
微信小程序飞机大战游戏步骤及代码
微信小程序飞机大战游戏步骤及代码
224 0
|
6月前
|
索引
塔防游戏开发实战教程(2):创建不同类型的炮塔
塔防游戏开发实战教程(2):创建不同类型的炮塔
58 0
|
6月前
塔防游戏开发实战教程(3):创建不同类型的敌人
塔防游戏开发实战教程(3):创建不同类型的敌人
170 0
|
图形学 数据安全/隐私保护
还在用Unity开发游戏?那你就out了,试试用Unity做一个答题系统吧
大家都支持Unity是用来做游戏开发,比如说做2D游戏、3D游戏,或者工业虚拟仿真软件的开发。 其他Unity可以做的有很多,比如答题系统。 本篇就介绍答题系统的开发 这个答题系统,可以从文本文档中提取题目和分数,然后绑定到UI上,在答题的过程中,自动判断分数,自动判断正确率。 目的是实现一个可快速导入到项目中使用的小模块。