c语言初学者
1.创作的目的
帮助初学者可以更加了解编程,提高对编程的乐趣。当初学者有一定的编程基础,可以通过一些基本的自定义函数实现基本的功能,比如这个五子棋游戏。
2.游戏主要模块及代码
2.1主函数模块
int main()
{
int input = 0;
char board[ROW][COL] = { 0 };
do
{
Menu(input);
scanf("%d", &input);
switch (input)
{
case 1:Game(board,ROW,COL);
break;
case 0:printf("退出游戏\n");
break;
default:printf("选择错误,重新选择\n");
break;
}
} while (input);
}
通过while循环以及switch实现功能选择。
2.2 头文件及函数声明
//头文件的包含
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
//符号的定义
#define ROW 5
#define COL 5
//菜单选项
void Menu(int i);
//游戏
void Game(char board[ROW][COL], int row, int col);
//棋盘界面初始化
void Init_board(char board[ROW][COL], int row, int col);
//显示棋盘界面
void Display_board(char board[ROW][COL], int row, int col);
//玩家下棋
void Player_move(char board[ROW][COL], int row, int col);
//电脑下棋
void Computer_move(char board[ROW][COL], int row, int col);
//判断输赢
char Is_win(char board[ROW][COL], int row, int col);
2.3菜单模块
void Menu(int i)
{
printf("*****************************************\n");
printf("**************1.开始游戏*****************\n");
printf("****************0.退出*******************\n");
printf("*****************************************\n");
}
通过简单的语法进行输出。
2.4游戏模块
#define _CRT_SECURE_NO_WARNINGS = 1;
#include "game.h"
void Menu(int i)
{
printf("*****************************************\n");
printf("**************1.开始游戏*****************\n");
printf("****************0.退出*******************\n");
printf("*****************************************\n");
}
void Init_board(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++)
board[i][j] = ' ';
}
}
void Display_board(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)
{
int j = 0;
for (j = 0; j < col; j++)
{
printf("---");
if (j < col-1)
printf("|");
}
printf("\n");
}
}
printf("\n");
}
void Player_move(char board[ROW][COL], int row, int col)
{
int x = 0;
int y = 0;
printf("玩家下棋:\n");
while (1)
{
printf("玩家输入坐标>");
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("该位置被占用,重新输入\n");
}
}
else
{
printf("非法输入,重新输入\n");
}
}
}
void Computer_move(char board[ROW][COL], int row, int col)
{
srand((unsigned int)time(NULL));
int x = 0;
int y = 0;
while (1)
{
x = rand() % row;
y = rand() % col;
if (board[x][y] == ' ')
{
board[x][y] = '#';
break;
}
}
}
char Is_win(char board[ROW][COL], int row, int col)
{
//玩家赢
int i = 0;
int c = 0;
int d = 0;
for (i = 0; i < row; i++)
{
int j = 0;
int count = 0;
int b = 0;
for (j = 0; j < col; j++)
{
if (board[i][j] == '*')//行
count++;
if (count == col)
return '*';
if (board[j][i] == '*')//列
b++;
if (b == col)
return '*';
if (i == j && board[i][j] == '*')
c++;
if (c == col)
return '*';
if (i + j == 4 && board[i][j] == '*')
d++;
if (d == col)
return '*';
}
}
//电脑赢
c = 0;
d = 0;
for (i = 0; i < row; i++)
{
int j = 0;
int count = 0;
int b = 0;
for (j = 0; j < col; j++)
{
if (board[i][j] == '#')//行
count++;
if (count == col)
return '#';
if (board[j][i] == '#')//列
b++;
if (b == col)
return '#';
if (i == j && board[i][j] == '#')
c++;
if (c == col)
return '#';
if (i + j == 4 && board[i][j] == '#')
d++;
if (d == col)
return '#';
}
//继续游戏
for (i = 0; i < row; i++)
{
int j = 0;
for (j = 0; j < col; j++)
{
if (board[i][j] == ' ')
return 'c';
}
}
//平局退出
return 'q';
}
}
void Game(char board[ROW][COL], int row, int col)
{
//初始化棋盘界面
Init_board(board, row, col);
//显示棋盘界面
Display_board(board, row, col);
char ret = 0;
while (1)
{
Player_move(board, row, col);
Display_board(board, row, col);
ret = Is_win(board, row, col);
if (ret != 'c')
break;
Computer_move(board, row, col);
Display_board(board, row, col);
ret = Is_win(board, row, col);
if (ret != 'c')
break;
}
if (ret == '*')
printf("玩家赢\n");
else if (ret == '#')
printf("电脑赢\n");
else
printf("平局\n");
}
主要是调用一些自定义函数实现游戏功能,包含棋盘初始化,玩家下棋,电脑下棋等。
3.总结
在编写代码时,遇到一些小问题,还好通过调试一步一步的实现基本功能。初学者可以通过对代码的进行一些调试,可以发现代码的一些问题。
代码电脑下棋部分,电脑是随机下的,读者可以通过一些算法将电脑下棋这部分代码写的灵活一点。