首页 > 编程语言 >Dev C++实现三子棋

Dev C++实现三子棋

时间:2023-08-17 21:35:30浏览次数:39  
标签:int 三子 board Dev char C++ printf COL ROW

1.新建项目三子棋

Dev C++实现三子棋_i++

2.新建game.c,game.h文件

Dev C++实现三子棋_#define_02

Dev C++实现三子棋_i++_03

3.

main.c代码

测试三子棋  

#include <stdio.h>

#include <stdlib.h>

#include "game.h"

void menu() {

printf("***************\n");

printf("*1.play 0.exit*\n");

printf("***************\n");

}  

//游戏的逻辑  

void game(){

int ret=0;

//数组-存放棋盘信息

char board[ROW][COL]={0};

//初始化棋盘

initboard(board, ROW, COL);  

//打印棋盘

displayboard(board, ROW, COL);  

//下棋

while(1){

 //玩家下棋

 playmove(board, ROW, COL);

 displayboard(board, ROW, COL);  

 //判断玩家是否赢

 ret=iswin(board, ROW, COL);  

 if(ret!='c'){

  break;

 }

 //电脑下棋  

 computermove(board, ROW, COL);

 displayboard(board, ROW, COL);  

       //判断电脑是否赢

    ret=iswin(board, ROW, COL);  

 if(ret!='c'){

  break;

 }    

}  

if(ret=='*'){

 printf("玩家win\n");

}else if(ret=='#'){

 printf("电脑win\n");

}else{

 printf("平局");  

}

}



void test() {

int input;

srand((unsigned int)time(NULL));//生成随机数  

do{

 menu();

 printf("请选择:>");

 scanf("%d", &input);

 switch (input) {

  case 1:

   game();

   break;

  case 0:

   printf("退出游戏");  

   break;

  default:

   printf("选择错误,请重新选择\n");

   break;

 }

}while(input);

}


int main() {

test();

return 0;

}

game.h代码

#define ROW 3

#define COL 3


#include <stdio.h>

#include <time.h>

#include <stdlib.h>


void initboard(char board[ROW][COL], int row, int col);

void displayboard(char board[ROW][COL], int row, int col);

void playmove(char board[ROW][COL], int row, int col);

void computermove(char board[ROW][COL], int row, int col);



char iswin(char board[ROW][COL], int row, int col);

//四种状态

//1.玩家赢  '*'  

//2.电脑赢  '#'  

//3.平局    'q'

//4.继续    'c'

game.c代码

#include "game.h"

void initboard(char board[ROW][COL], int row, int col) {

for(int i=0;i<ROW;i++){

 for(int j=0;j<COL;j++){

  board[i][j]=' ';

 

 }

}

}


void displayboard(char board[ROW][COL], int row, int col) {

int i=0;

for(i=0;i<row;i++){

 int j=0;

 for(j=0;j<col;j++){

  //1.打印一行的数据  

  printf(" %c ", board[i][j]);

  if(j<col-1)

  printf("|");

 }

 printf("\n");

 //2.打印分隔行  

 if(i<row-1){

  for(j=0;j<col;j++){

   printf("---");

   if(j<col-1)

    printf("|");

  }

   printf("\n");

  }

 }

}



void playmove(char board[ROW][COL], int row, int col) {

int x=0;

int y=0;

printf("玩家走:>\n");

while(1){

printf("请输入要下的坐标:>");  

scanf("%d %d", &x, &y);

//判断x,y坐标的合法性

   if(x>=1&&x<=row&&y>=1&&y<=col){

 if(board[x-1][y-1]==' '){

  board[x-1][y-1]='*';

  break;

 }else{

  printf("该坐标被占用\n");

 }

}

 else{

  printf("坐标非法,请重新输入!\n");

 }

}  

}  


void computermove(char board[ROW][COL], int row, int col) {

int x=0;

int y=0;

printf("电脑走:>\n");

   while(1){

 x=rand()%row;//使用rand函数,必须调用srand,srand只能调用一次  

 y=rand()%col;

 if(board[x][y]==' '){

  board[x][y]='#';

  break;

 }

}


}

int isfull(char board[ROW][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;//满了  

}


char iswin(char board[ROW][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][1]!=' '){

  return board[i][1];

 }

}

//三列  

for(int i=0;i<col;i++){

 if(board[0][i]==board[1][i]&&board[1][i]==board[2][i]&&board[1][i]!=' '){

  return board[1][i];

 }

}

//两个对角线  

if(board[0][0]==board[1][1]&&board[1][1]==board[2][2]&&board[1][1]!=' ')  

 return board[1][1];

if(board[2][0]==board[1][1]&&board[1][1]==board[0][2]&&board[1][1]!=' ')  

  return board[1][1];

//判断是否平局

if(1==isfull(board, ROW, COL)){

 return 'q';

}  

return 'c';  

}

4.测试

Dev C++实现三子棋_#define_04

5.简单的三子棋游戏就此实现


标签:int,三子,board,Dev,char,C++,printf,COL,ROW
From: https://blog.51cto.com/u_16228872/7127060

相关文章

  • 基础算法之搜索与回溯算法C++
    1、组合的输出【题目描述】排列与组合是常用的数学方法,其中组合就是从n个元素中抽出r个元素(不分顺序且r≤n),我们可以简单地将n个元素理解为自然数1,2,…,n,从中任取r个数。现要求你用递归的方法输出所有组合。例如n=5,r=3,所有组合为:12312412513413514523......
  • C++ STL算法篇@@
    算法基础算法概述算法部分主要由头文件,,组成.是所有STL头文件中最大的一个,其中常用到的功能范围涉及到比较交换替换便利操作复制修改反转排序合并等等.体积很小,只包括几个在序列上面进行简单数学运算的模板函数,包括加法和乘法在序列上的一些操作定义了一些模板类,用以声明函数......
  • 在C++中实现多线程异步TCP消息发送
    本文主要解释了在C++中如何实现一个多线程,异步发送TCP消息的系统。我们将会用到C++的标准库和Boost.Asio库。基础知识TCP(TransmissionControlProtocol):是一种面向连接的、可靠的、基于字节流的通信协议。它在两个网络节点之间创建一个稳定的连接,以便可以交换字节流。多线程编程:......
  • c/c++ 程序错误记录
     //返回类型为int,正常执行代码就会没有返回值,引起段错误inttest(int**a)//错误,引起段错误,且没有打印输出信息。{try{    *a=newint[10];  }catch(constchar*msg){    fprintf(stderr,"%s",msg);    return-1;  }}......
  • 有关C++哈希函数的常用形式,具体解释见注释
    #pragmaonce#include<unordered_set>#include<unordered_map>namespacehash_function{ //将参数传入 template<typename...Types> inlinesize_thash_val(constTypes&...args){ size_tseed=0; hash_val(seed,args...); returnseed;......
  • Lnton羚通关于安装 Visual Studio 2022 Community 卡住了&& 安装 Windows SDK(Softwar
    【问题原因】a.系统升级了;b.之前卸载没卸载干净,注册表里存在旧的信息;【解决过程】1.查看日志在资源管理器中输入%TEMP%\windowssdk,查看日志文件,找到最新的日志文件,在文件中搜索Warning出现了一组长串数字,用 {} 括起来的一串,这串数字后面要用;2.微软官方工具微软官方的工具(Micr......
  • 9.1 C++ STL 排序、算数与集合
    C++STL(StandardTemplateLibrary)是C++标准库中的一个重要组成部分,提供了丰富的模板函数和容器,用于处理各种数据结构和算法。在STL中,排序、算数和集合算法是常用的功能,可以帮助我们对数据进行排序、统计、查找以及集合操作等。STL提供的这些算法,能够满足各种数据处理和分析的需求......
  • 10.1 C++ STL 模板适配与迭代器
    STL(StandardTemplateLibrary)标准模板库提供了模板适配器和迭代器等重要概念,为开发者提供了高效、灵活和方便的编程工具。模板适配器是指一组模板类或函数,它们提供一种适配机制,使得现有的模板能够适应新的需求。而迭代器则是STL中的令一种重要的概念,它是一个抽象化的数据访问机制,......
  • 11.1 C++ STL 应用字典与列表
    C++STL标准模板库提供了丰富的容器和算法,这些模板可以灵活组合使用,以满足不同场景下的需求。本章内容将对前面学习的知识进行总结,并重点讲解如何灵活使用STL中的vector和map容器,以及如何结合不同的算法进行组合。通过灵活组合使用这些容器和算法,能够满足不同场景下的需求,实现高......
  • 9.1 C++ STL 排序、算数与集合
    C++STL(StandardTemplateLibrary)是C++标准库中的一个重要组成部分,提供了丰富的模板函数和容器,用于处理各种数据结构和算法。在STL中,排序、算数和集合算法是常用的功能,可以帮助我们对数据进行排序、统计、查找以及集合操作等。STL提供的这些算法,能够满足各种数据处理和分析的需......