博客
关于我
C语言学习
阅读量:323 次
发布时间:2019-03-03

本文共 4844 字,大约阅读时间需要 16 分钟。

学习C语言,开发三子棋小游戏

开发三子棋小游戏是学习C语言的绝佳入门项目。这款小游戏不仅能锻炼编程基础,还能激发逻辑思维能力。以下是从头到尾的开发过程和心得体会。

1.1 创建头文件

首先,建立一个头文件game.h,用以声明游戏所需的函数接口。文件内容如下:

#define ROW 3#define COL 3#include 
#include
#include
void InitBoard(char board[ROW][COL], int row, int col);void DisplayBoard(char board[ROW][COL], int row, int col);void PlayerMove(char board[ROW][COL], int row, int col);void ComputerMove(char board[ROW][COL], int row, int col);// 定义游戏状态// 玩家赢 '*',电脑赢 '#’,平局 'Q',游戏继续 'C’char IsWin(char board[ROW][COL], int row, int col);

1.2 创建C源文件

接下来,编写C源文件game.c,实现上述接口的功能。文件内容如下:

#include "game.h"#include 
#include
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++) { printf(" %c ", board[i][j]); if (j < col - 1) { printf("|"); } } printf("\n"); // 打印分割行 if (i < row - 1) { for (j = 0; j < col; j++) { printf("---"); if (j < col - 1) { printf("|"); } } printf("\n"); } }}void PlayerMove(char board[ROW][COL], int row, int col) { int x = 0, y = 0; printf("Player play chess\n"); while (1) { scanf("%d%d", &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("The coordinate is occupied!\n"); } } else { printf("Coordinate do not match, please re-enter!\n"); } }}void ComputerMove(char board[ROW][COL], int row, int col) { int x = 0, y = 0; printf("Computer play chess\n"); while (1) { x = rand() % row; y = rand() % col; if (board[x - 1][y - 1] == ' ') { board[x - 1][y - 1] = '#'; break; } }}int IsFull(char board[ROW][COL], int row, int col) { int i = 0, j = 0; for (i = 0; i < row; i++) { for (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][0] == 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[0][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[0][0] == board[2][2] && board[1][1] != ' ') { return board[1][1]; } // 判断平局 if (IsFull(board, row, col)) { return 'Q'; } return 'C';}

1.3 测试文件

编写测试文件test.c,用于运行游戏的主程序。文件内容如下:

#include "game.h"#include 
#include
#include
void menu() { printf("-------------TIC-TAC-TOC GAME--------------\n"); printf("-------1.Play Game------------0.Sign out-------\n"); printf("-------------------------------------------\n");}void game() { char ret = 'C'; char board[ROW][COL] = {0}; InitBoard(board, ROW, COL); DisplayBoard(board, ROW, COL); while (1) { PlayerMove(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("The player won!\n"); } else if (ret == '#') { printf("Computer won!\n"); } else { printf("It ends in a draw!\n"); }}void test() { int start = 0; srand((unsigned int)time(NULL)); do { menu(); printf("Please choose whether to start the game\n"); scanf("%d", &start); switch (start) { case 1: game(); break; case 0: printf("----------Sign out game-----------\n"); break; default: printf("----------Choose Again-----------\n"); break; } } while (start);}int main() { test(); getchar(); getchar();}

1.4 游戏运行

将以上文件合并编译,运行游戏可直接从终端输入1开始游戏。游戏规则如下:

  • 玩家先输入坐标进行下棋
  • 系统提示是否继续游戏,输入0退出
  • 游戏结束后,系统会提示胜负结果
  • 通过这个项目,我学会了如何从零开始开发一款简单的游戏,同时也加深了对C语言编程的理解。编写代码的过程中,我不断学习了如何管理内存、处理输入输出,以及如何实现简单的逻辑判断。虽然游戏功能简单,但它为后续的学习打下了坚实的基础。

    编程的过程中,我也深刻体会到:一个小小的细节可能导致程序运行异常,代码的结构清晰性至关重要。同时,合理的项目管理和代码复用设计能够极大地提升开发效率。

    加油!继续向着成为一名专业的程序员迈进!

    转载地址:http://opqm.baihongyu.com/

    你可能感兴趣的文章
    multisim变压器反馈式_穿过隔离栅供电:认识隔离式直流/ 直流偏置电源
    查看>>
    mysql csv import meets charset
    查看>>
    multivariate_normal TypeError: ufunc ‘add‘ output (typecode ‘O‘) could not be coerced to provided……
    查看>>
    MySQL DBA 数据库优化策略
    查看>>
    multi_index_container
    查看>>
    MySQL DBA 进阶知识详解
    查看>>
    Mura CMS processAsyncObject SQL注入漏洞复现(CVE-2024-32640)
    查看>>
    Mysql DBA 高级运维学习之路-DQL语句之select知识讲解
    查看>>
    mysql deadlock found when trying to get lock暴力解决
    查看>>
    MuseTalk如何生成高质量视频(使用技巧)
    查看>>
    mutiplemap 总结
    查看>>
    MySQL DELETE 表别名问题
    查看>>
    MySQL Error Handling in Stored Procedures---转载
    查看>>
    MVC 区域功能
    查看>>
    MySQL FEDERATED 提示
    查看>>
    mysql generic安装_MySQL 5.6 Generic Binary安装与配置_MySQL
    查看>>
    Mysql group by
    查看>>
    MySQL I 有福啦,窗口函数大大提高了取数的效率!
    查看>>
    mysql id自动增长 初始值 Mysql重置auto_increment初始值
    查看>>
    MySQL in 太多过慢的 3 种解决方案
    查看>>