C语言代码实现三子棋小游戏

 更新时间:2020年11月23日 11:11:35   作者:安然Arran  
这篇文章主要为大家详细介绍了C语言代码实现三子棋小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了C语言实现三子棋小游戏的具体代码,供大家参考,具体内容如下

设计思路

三子棋的C语言设计的思路:

1.设计一个界面:让玩家运行后即可以看到一个界面,而此时界面需要一个让玩家选择的语句,即可以选择玩游戏或者退出操作。界面设计需要swich语句的实现,退出游戏设计选项为0,即可以当选择退出游戏时直接退出while(循环),即结束游戏。

2.游戏实现:当玩家选择玩游戏时,调用启动游戏的函数,而在游戏中,应当有的内容有:
(1)游戏内的棋盘设计:三子棋应当是三行三列的一个棋盘,通过函数打印出来。
(2)玩家的移动:玩家输入相应的坐标然后将属于玩家的标记打印在棋盘上,且电脑不能在同一位置打印。
(3)电脑的移动:电脑应随即控制,即调用rand函数,使用time和时间随机。
(4)输赢的处理:这里需要给出判断输赢的条件:即任意一行或一列或对角线相同即为赢,通过标记的符号来判断玩家赢还是电脑赢,如果棋盘放满且仍未判断出输赢,则为平局。
(5)函数的调用处理:在函数调用时,每走一步,应打印出相对应的棋盘供玩家观看,定义一个头文件直接将所需函数的头文件以及所需要的定义的行列常量,函数声明放在里面,在代码中只需用COL和ROW表示即可,需要修改棋盘的时候,只需修改头文件中的define所定义的COL以及ROW。

代码实现:

首先是游戏的界面代码:直接用printf打印出来即可

void meun()
{
 printf("****************\n");
 printf("*****0.Exit*****\n");
 printf("*****1.Play*****\n");
 printf("****************\n");
}

然后设计出三子棋的棋盘

void ShowBoard(char board[][COL], int row, int col)
{
 for (int i = 0; i < row; i++)
 {
 for (int j = 0; j < col; j++)
 {
 printf(" %c ",board[i][j]);
 if (j < col-1)
 {
 printf("|");
 }
 }
 printf("\n");
 if (i < row - 1)
 {
 for (int j = 0; j < col; j++)
 {
 printf("---");
 if (j < col - 1)
 {
 printf("|");
 }
 }
 printf("\n");
 }
 }
}

玩家的移动实现,特别提到的是,实现时注意玩家输入的坐标与数组对应下标的关系:玩家输入的坐标对应的数组下标应该减一。

void PlayerMove(char board[][COL], int row, int col)
{
 int x = 0;
 int y = 0;

 while (1)
 {
 printf("请输入你的坐标:\n");
 scanf("%d%d",&x,&y);
 if (x >= 1 && x <= 3 && y >= 1 && y <= 3)
 {
 if (board[x - 1][y - 1] == ' ')
 {
 board[x - 1][y - 1] = 'X';
 break; 
 }
 }
 else
 {
 printf("坐标有误,请重新输入\n");
 }

 }
}

电脑下棋的功能实现:(用time让rand函数变成随机值而不固定随机)

void ComputerMove(char board[][COL], int row, int col)
{
 while (1)
 {
 srand((unsigned)time(NULL));
 int x = rand() % ROW;
 int y = rand() % COL;
 if (board[x][y] == ' ')
 {
 board[x][y] = 'O';
 break;
 }
 }
}

输赢的处理(代码与思路一致,有IsWin函数(判断输赢),IsFull(判断平局))

char IsWin(char board[][COL], int row, int col)
{
 for (int i = 0; i < row; i++)
 {
 if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][0]!=' ')
 {
 return board[i][0];
 }
 if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[0][i] != ' ')
 {
 return board[0][i];
 }
 if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[0][0] != ' ')
 {
 return board[0][0];
 }
 if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' ')
 {
 return board[0][2];
 }
 if (IsFull(board, row, col) == 1)
 {
 return 'Q';
 }
 }
 return ' ';
}


static int IsFull(char board[][COL], int row, int col)
{
 for (int i = 0; i < row; i++)
 {
 for (int j = 0; j < col; j++)
 {
 if (board[i][j] == ' ')
 {
 return 0;
 }
 }
 }
 return 1;
}

最后就是函数调用问题,设计一个函数game()来调用设计好的代码功能,进行游戏功能的实现

void game()
{
 char board[ROW][COL] = {0};
 InitBoard(board, ROW, COL);
 ShowBoard(board, ROW, COL);
 int ret = 0;
 while (1)
 {
 PlayerMove(board, ROW, COL);
 ComputerMove(board, ROW, COL);
 ShowBoard(board, ROW, COL);
 ret = IsWin(board, ROW, COL);
 if (ret != ' ')
 {
 break;
 }
 }
 if (ret == 'X')
 {
 printf("玩家赢\n");
 }
 
 if (ret == 'O')
 {
 printf("电脑赢\n");

 }
 if (ret == 'Q')
 {
 printf("平局\n");
 }
}

主函数作为入口,让玩家自由选择进入游戏或者退出

int main()
{
 int input = 0;
 do
 {
 meun();
 printf("请选择是否进入游戏:");
 scanf("%d",&input);
 switch (input)
 {
 case 1:
 game();
 break;
 case 0:
 printf("退出游戏\n");
 break;
 default:
 printf("选择有误,请重新输入\n");
 break;
 }
 } while (input);
 return 0;
}

一些需要调用的库函数以及定义,函数声明放在自定义头文件中调用即可

#ifndef _GAME_H_
#define _GAME_H_
#include<stdio.h>
#include<stdlib.h>
#pragma once
#define ROW 3
#define COL 3
void InitBoard(char board[][COL],int row,int cow);
void ShowBoard(char board[][COL], int row, int col);
void PlayerMove(char board[][COL], int row, int col);
void ComputerMove(char board[][COL], int row, int col);
char IsWin(char board[][COL], int row, int col);


#endif

运行结果

更多有趣的经典小游戏实现专题,分享给大家:

C++经典小游戏汇总

python经典小游戏汇总

python俄罗斯方块游戏集合

JavaScript经典游戏 玩不停

java经典小游戏汇总

javascript经典小游戏汇总

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • C++ std::function的用法详解

    C++ std::function的用法详解

    这篇文章主要介绍了C++ std::function使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-10-10
  • C++ 命名空间与输入输出操作代码

    C++ 命名空间与输入输出操作代码

    C++是一种面向对象的计算机程序设计语言,‌它扩展了C语言的功能,‌并引入了面向对象编程的概念,‌如类、‌继承和多态等,C++是以C语言为基础进行了拓展与创新,C++兼容C语言绝大多数的语法,这篇文章主要介绍了C++ 命名空间与输入输出,需要的朋友可以参考下
    2024-08-08
  • C++ 二叉树的实现超详细解析

    C++ 二叉树的实现超详细解析

    二叉树可以简单理解为对于一个节点来说,最多拥有一个上级节点,同时最多具备左右两个下级节点的数据结构。本文将详细介绍一下C++中二叉树的实现和遍历,需要的可以参考一下
    2022-03-03
  • C语言中的编码小技巧

    C语言中的编码小技巧

    这篇文章主要介绍了C语言中的编码小技巧,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • 利用C语言实现简单三子棋游戏

    利用C语言实现简单三子棋游戏

    这篇文章主要为大家详细介绍了利用C语言实现简单三子棋游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-03-03
  • C/C++中多态性详解及其作用介绍

    C/C++中多态性详解及其作用介绍

    这篇文章主要介绍了C/C++中多态性(polymorphism)详解及其作用介绍,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • C++继承和动态内存分配

    C++继承和动态内存分配

    这篇文章主要介绍了C++继承和动态内存分配,当我们的基类使用动态内存分配,并且重新定义赋值和复制构造函数,这会对派生类的实现有什么影响呢?我们带罩疑问俩姐下面文章内容吧
    2022-01-01
  • C++智能指针之shared_ptr详解

    C++智能指针之shared_ptr详解

    这篇文章主要为大家详细介绍了C++智能指针之shared_ptr,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • c语言动态内存分配知识点及实例

    c语言动态内存分配知识点及实例

    在本篇文章里小编给大家整理的是关于c语言动态内存分配知识点及实例,需要的朋友们可以学习下。
    2020-03-03
  • C++红黑树的底层实现机制详解

    C++红黑树的底层实现机制详解

    红黑树与AVL树一样,也是一种自平衡的二叉搜索树,它在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black,通过对任何一条从根到叶子的路径上各个结点着色方式的限制,本文介绍了C++红黑树的底层实现机制,需要的朋友可以参考下
    2024-08-08

最新评论