博客
关于我
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/

    你可能感兴趣的文章
    MySQL-索引的分类(聚簇索引、二级索引、联合索引)
    查看>>
    Mysql-触发器及创建触发器失败原因
    查看>>
    MySQL-连接
    查看>>
    mysql-递归查询(二)
    查看>>
    MySQL5.1安装
    查看>>
    mysql5.5和5.6版本间的坑
    查看>>
    mysql5.5最简安装教程
    查看>>
    mysql5.6 TIME,DATETIME,TIMESTAMP
    查看>>
    mysql5.6.21重置数据库的root密码
    查看>>
    Mysql5.6主从复制-基于binlog
    查看>>
    MySQL5.6忘记root密码(win平台)
    查看>>
    MySQL5.6的Linux安装shell脚本之二进制安装(一)
    查看>>
    MySQL5.6的zip包安装教程
    查看>>
    mysql5.7 for windows_MySQL 5.7 for Windows 解压缩版配置安装
    查看>>
    Webpack 基本环境搭建
    查看>>
    mysql5.7 安装版 表不能输入汉字解决方案
    查看>>
    MySQL5.7.18主从复制搭建(一主一从)
    查看>>
    MySQL5.7.19-win64安装启动
    查看>>
    mysql5.7.19安装图解_mysql5.7.19 winx64解压缩版安装配置教程
    查看>>
    MySQL5.7.37windows解压版的安装使用
    查看>>