写了个游戏小集合

//game.h  头文件  用来声明函数

#define _CRT_SECURE_NO_WARNINGS
#define line 3
#define column 3
#include<Windows.h>
#include<time.h>
void game();
void threechress();
void model();
void player(char chressboard[line][column], int a, int b);
void computer(char chressboard[line][column], int a, int b);
char win(char chressboard[line][column], int a, int b);
int Isfull(char chessboard[line][column], int a, int b);

//game_function.cpp    源文件  用来写游戏内容函数的源文件

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

#include"game.h"
void start(char chressboard[line][column], int a, int b) {
    int i = 0;
    int j = 0;
    for (i = 0; i < a; i++) {
        for (j = 0; j < b; j++) {

            chressboard[i][j]=' ';
        }
    }
}
void model(char chressboard[line][column], int a, int b) {

    int i = 0;
    
    int j = 0;
    for (i = 0; i < a-1; i++) {
        for (j = 0; j < b; j++) {

            printf(" %c ", chressboard[i][j]);
            if(j<b-1)
            printf("|");
            if (j == b - 1)
                printf("\n");

        }
        for (j = 0; j < b; j++) {
            
            printf("--- ");

            if (j == b - 1)
                printf("\n");
        }
        
            
    }
    for (j = 0; j < b; j++) {

        printf(" %c ", chressboard[a-1][j]);
        if (j < b - 1)
            printf("|");
        if (j == b - 1)
            printf("\n");
    }
    //Sleep(500000);
}

//玩家回合执行函数
void player(char chressboard[line][column], int a, int b)
{
    int m = 0;
    int n = 0;
    int x = 0;
    printf("请玩家走!");
    
    //玩家输入坐标值
    do{
        printf("请输入你要放入棋子的坐标\n");
        scanf("%d%d", &m, &n);
        //检验坐标值的合法性  有没有超出棋盘
        if ((m > line || n > column)||(m<=0||n<=0)){
            printf("您的输入有误,请重新输入!"); 
            
        }
        else if (chressboard[m - 1][n - 1] == ' ') {
            chressboard[m - 1][n - 1] = '*';
            
            break;
            
        }
        else {
            printf("该位置已有棋子了,请重新输入坐标");
            
        }
    } while (1);
    
}
void computer(char chressboard[line][column], int a, int b) {
    //让计算机在没有下棋的位置随机下棋   即   在元素为空格的位置产生随机数
    printf("电脑回合\n");
    
    int x = 0;
    int y = 0;
    while (1) {
        x = rand() % line;
        y = rand() % column;
        if (chressboard[x][y] == ' ') {
            chressboard[x][y] = '#';
            break;
        }


    }
}
//判断棋盘是否已填满的函数  返回1表示棋盘满了  返回0表示棋盘没满
int Isfull(char chessboard[line][column], int a, int b) {
    //遍历数组  判断是否还有空格
    int i = 0; 
    int j = 0;
    for (i = 0; i < a; i++) {
        for (j = 0; j < b; j++) {
            if (chessboard[i][j] == ' ')
                return 0;
        }
    }
    return 1;
}

//游戏胜负判断函数
//需要反馈四种状态 1.玩家赢返回* 2,电脑赢返回# 3,平局返回q 4.未分出胜负,继续返回p
char win(char chressboard[line][column], int a, int b) {
    int i = 0;
    //判断横三行是否都一样 并且都不是空格
    for (i = 0; i < line; i++) {
        if (chressboard[i][0] == chressboard[i][1] && chressboard[i][1] == chressboard[i][2] && chressboard[i][0] != ' ') {
            return chressboard[i][0];
        }
    }
    //判断竖三列是否都一样 并且都不是空格
    int j = 0;
    for (j = 0; j < column; j++) {
        if (chressboard[0][j] == chressboard[1][j] && chressboard[1][j] == chressboard[2][j] && chressboard[0][j] != ' ')
            return chressboard[0][j];
    }
    //判断左斜和右斜
    if(chressboard[0][0] == chressboard[1][1] && chressboard[1][1] == chressboard[2][2] && chressboard[0][0] != ' ')
            return chressboard[0][0];
    if (chressboard[0][2] == chressboard[1][1] && chressboard[1][1] == chressboard[2][0] && chressboard[1][1] != ' ')
             return chressboard[1][1];
    //判断是否平局  棋盘满了  即棋盘中没有空格存在  在此处添加一个函数 来判断棋盘有没有满
    if (1 == Isfull(chressboard, line, column)) {
             return 'q';
    }
             return 'p';
}
void threechress() {
    //先创建一个棋盘  建立3x3的二维数组
    char chressboard[line][column] = { 0 };
    //将棋盘数组遍历初始化  每个元素初始化为空格
    start(chressboard, line, column);
    //进行整理棋盘的布局  并打印出来
    model(chressboard, line, column);
    //棋盘已完成打印   开始实现游戏执行内容
    //根据分析  在一个循环中实现
    while (1) {
        //使用玩家函数进行封装玩家回合需要执行的代码
        player(chressboard, line, column);
        //玩家每次下完棋 需要更新一下棋盘
        system("slc");
        model(chressboard, line, column);
        //此处应该添加胜利判断函数  来判断玩家下完棋后有没有赢
        win(chressboard, line, column);
        char ret = win(chressboard, line, column);
        if (ret != 'p')
            break;

        //使用函数封装电脑回合需要执行的代码
        computer(chressboard, line, column);
        //电脑每次下完棋,需要更新一下棋盘
        system("slc");    
        model(chressboard, line, column);
        //再此处应添加胜利判断函数  来判断电脑下完棋后有没有赢
        win(chressboard, line, column);
        if (ret != 'p')
            break;
    }
    char ret = win(chressboard, line, column);
    if (ret == '*')
        printf("玩家获胜!违背了目的,其实你输了!\n");
    if (ret == '#')
        printf("你让电脑获胜了,这才是真正的胜利!\n");
    if (ret == 'q')
        printf("很遗憾,平局!\n");
    
        
}
 

//game_framework.cpp   用于写游戏界面和进入和退出游戏的框架

#define _CRT_SECURE_NO_WARNINGS
#include"game.h"
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#include<time.h>

//菜单函数和选择函数
//用于开始和结束
//菜单   开始界面
void order() {
    printf("\t\t\t\t   ********************************************\n");
    printf("\t\t\t\t   *******  1.开始游戏    0.退出游戏  *********\n");
    printf("\t\t\t\t   ********************************************\n");
}
 int choose()
{
     int b = 0;
    int a = 0;
    printf("\t\t\t\t\t开始游戏请按1,退出游戏请按0!");
    scanf("%d", &a);
    system("cls");
    switch (a)
    {
    case 1:
        game();
        //system("cls");
        printf("\t\t\t\t    游戏结束,重新开始请按1,直接退出请按0!");
        scanf("%d", &b);
        return b;
    case 0:
        return 0;
    default:
        system("cls");
        printf("\t\t\t\t\t 您的输入有误!请重新输入\n");
        choose();
    }
}


 void game() {

     printf("\t\t\t\t\t\t1.三子棋\n\n\n");
     printf("\t\t\t\t\t\t2.猜数字\n\n\n");
     printf("\t\t\t\t\t\t 3.扫雷\n\n\n");
     printf("\t\t\t\t\t\t请您进行选择");
     int x = 0;
     int r = 0;
     int gess = 0;

     scanf("%d", &x);
     system("cls");


     switch (x)
     {
     case 1:
         printf("\t\t\t\t\t\t1.三子棋\n\n\n");
         printf("请发挥你的智慧让电脑获胜!");
         threechress();


         break;


     case 2:
         printf("\t\t\t\t\t\t2.猜数字\n\n\n");
         printf("\t\t\t\t\t\t请您输入数字\n\n\n");
         r = rand() % 100 + 1;

         while (1) {
             scanf("%d", &gess);
             if (gess < r)
                 printf("猜小了");
             else if (gess > r)
                 printf("猜大了");
             else
             {
                 printf("恭喜你,猜对了\n");
                 Sleep(1000);
                 system("cls");
                 break;
             }
            
         }
         break;
     case 3:
         printf("\t\t\t\t\t\t 3.扫雷\n\n\n");
         printf("请慎重选择,不要猜到雷!");
         clearplayer();
         break;
     default:
         break;
            
         
     }
 }
int main() {
    srand((unsigned int)time(NULL));
    int x = 0;
    int c = 0;
    do {//菜单界面
        
        order();//选择选择选项函数
        c=choose();
}while(c);
    printf("\t\t\t\t\t\t\t\t\t      欢迎下次再来!");

    return 0;
}

通过这次的整体练习对C语言又有了更深层次的认识,将文件代码分类,头文件 函数源文件 测试源文件,对代码进行了封装和模块化,使得代码更容易整理和修改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值