1.一个简单的自我介绍
我是来自宁夏大学软件工程的一名学生,因为从小喜欢玩游戏,长大对于计算机领域也产生了非常浓厚的兴趣,于是在高考结束后的志愿填报中毫不犹豫的全部选择了计算机专业,希望在接下来的学习中不断进步,在IT行业中发挥自己的光和热。
我的学习计划:在大一,学习C/C++以及数据结构;大二学习Linux,算法,MySQL以及QT。争取在大三找到自己的第一份实习offer。
自我感觉我对我的学习安排的任务很重,所以我打算投入更多的时间和精力,目前的战果是每天坚持4小时的额外学习,希望以后能够再有所突破。
最终目标:成为一位合格的工业软件开发工程师!
以下是最近完成的两个小作业
2.三子棋的实现以及代码逻辑分析(C语言实现)
为了让逻辑更加清晰,这里需添加一个头文件game.h(用于声明函数等),两个源文件game.c(用于函数存放)和test.c(代码运行)。
首先,一个游戏最主要的就是菜单,但是在制作菜单时考虑到游戏需要重复运行,所以这里采用do...while来制作。
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
void menu()
{
printf(" \n");
printf(" 1.play \n");
printf(" 0.exit \n");
printf(" \n");
}
void test()
{
int input;
do
{
menu();
printf("请选择>");
scanf("%d", &input);
switch (input)
{
case 1:
printf("进行游戏\n");
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("选择错误,重新输入\n");
break;
}
} while(input);
}
int main(void)
{
test();
return 0;
}
这样我们就可以完成打印菜单的操作,想要进行游戏,我们先在case 1中printf部分替换为game()函数,接下来我们来完成这个小游戏的制作。
对于3*3的棋盘。我首先想到的是利用数组来完成坐标的表示以便达到目的,那么首先进行棋盘的初始化以及打印。
//test.c
void game()
{
srand((unsigned int)time(NULL));
char board[ROW][COL];
//初始化棋盘
init_board(board,ROW,COL);
//打印棋盘
print_board(board,ROW,COL);
}
//game.h
//初始化棋盘
void init_board(char board[ROW][COL], int row, int col);
//打印棋盘
void print_board(char board[ROW][COL], int row, int col);
//game.c
void init_board(char board[ROW][COL], int row, int col)
{
int i;
for (i = 0; i < row; i++)
{
int j;
for (j = 0; j < col; j++)
{
board[i][j] = ' ';
}
}
}
void print_board(char board[ROW][COL], int row, int col)
{
int i;
for (i = 0; i < row; i++)
{
int j;
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");
}
}
}
然后便是玩家和电脑的操作阶段,电脑这里的随机性采用时间戳的方式:
//test.c
while (1)
{
//玩家行动
player(board, ROW, COL);
print_board(board, ROW, COL);
//电脑行动
computer(board, ROW, COL);
print_board(board, ROW, COL);
}
//game.h
//玩家下棋
void player(char board[ROW][COL], int row, int col);
//电脑下棋
void computer(char board[ROW][COL], int row, int col);
//game.c
void player(char board[ROW][COL], int row, int col)
{
printf("玩家行动,请输入要下棋的坐标:");
while (1)
{
int x = 0;
int y = 0;
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(char board[ROW][COL], int row, int col)
{
while (1)
{
printf("\n电脑行动\n");
int x = rand() % row;
int y = rand() % col;
if (board[x][y] == ' ')
{
board[x][y] = '#';
break;
}
}
}
最后加上判断输赢,就完成这个简单的游戏了,这边给出全部代码^_^
test.c:
#include "game.h"
void menu()
{
printf(" \n");
printf(" 1.play \n");
printf(" 0.exit \n");
printf(" \n");
}
void game()
{
srand((unsigned int)time(NULL));
char board[ROW][COL];
//初始化棋盘
init_board(board,ROW,COL);
//打印棋盘
print_board(board,ROW,COL);
while (1)
{
//玩家行动
player(board, ROW, COL);
print_board(board, ROW, COL);
//判断输赢
char ret = win(board, ROW, COL);
if (ret != 'C')
{
break;
}
//电脑行动
computer(board, ROW, COL);
print_board(board, ROW, COL);
if (ret != 'C')
{
break;
}
}
char ret = win(board, ROW, COL);
if (ret == '#')
printf("电脑赢了\n");
else if (ret == '*')
printf("玩家赢了\n");
else if (ret == 'N')
printf("平局\n");
}
void test()
{
int input;
do
{
menu();
printf("请选择>");
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("选择错误,重新输入\n");
break;
}
} while(input);
}
int main(void)
{
test();
return 0;
}
game.h:
#define ROW 3
#define COL 3
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
//初始化棋盘
void init_board(char board[ROW][COL], int row, int col);
//打印棋盘
void print_board(char board[ROW][COL], int row, int col);
//玩家下棋
void player(char board[ROW][COL], int row, int col);
//电脑下棋
void computer(char board[ROW][COL], int row, int col);
//判断输赢
char win(char board[ROW][COL], int row, int col);
game.c
#include "game.h"
void init_board(char board[ROW][COL], int row, int col)
{
int i;
for (i = 0; i < row; i++)
{
int j;
for (j = 0; j < col; j++)
{
board[i][j] = ' ';
}
}
}
void print_board(char board[ROW][COL], int row, int col)
{
int i;
for (i = 0; i < row; i++)
{
int j;
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 player(char board[ROW][COL], int row, int col)
{
printf("玩家行动,请输入要下棋的坐标:");
while (1)
{
int x = 0;
int y = 0;
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(char board[ROW][COL], int row, int col)
{
while (1)
{
printf("\n电脑行动\n");
int x = rand() % row;
int y = rand() % col;
if (board[x][y] == ' ')
{
board[x][y] = '#';
break;
}
}
}
static int is_full(char board[ROW][COL], int row, int col)
{
int i = 0;
int j = 0;
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
if (board[i][j] == ' ')
return 0;
}
}
return 1;
}
char win(char board[ROW][COL], int row, int col)
{
int i = 0;
//判断行
for (i = 0; i < row; i++)
{
if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][0] != ' ')
return board[i][0];
}
//判断列
for (i = 0; i < col; i++)
{
if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[0][i] != ' ')
return board[0][i];
}
//对角线
if (board[0][0]== board[1][1] && board[1][1] == board[2][2] && board[1][1]!=' ')
return board[1][1];
if(board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' ')
return board[1][1];
//平局
if (is_full(board, row, col) == 1)
return 'N';
//继续游戏
return 'C';
}
这就是我的第一篇博客啦,有什么不完善的地方请大家多多包涵,也希望能给出建议,我会努力改正的。
最后于诸君共勉!
标签:新人,三子,C语言,int,col,board,printf,COL,ROW From: https://blog.csdn.net/2402_88147816/article/details/143672262