C语言中级程序大作业

更新时间:2023-06-11 05:44:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

期末大作业

C语言中级程序设计报告

1、设计任务书

1.1题目与要求

编写简单的井子棋游戏,是一种在3*3格子上进行的连珠游戏。要求由分别代表O和X的两个游戏者轮流在格子里留下标记(一般来说先手者为X),由最先在任意一条直线上成功连接三个标记的一方获胜。 1.2本程序涉及的知识点

变量的定义,产生随机字母的函数,while循环语句,if语句,goto语句等。

2、功能设计

2.1算法设计

本程序实现的功能要求:利用while语句执行游戏及if语句计算出游戏得分。 设计流程:

3、程序代码

#include<stdio.h> #include<stdlib.h> #include<windows.h> int main(void) {

start: //在某些情况下游戏重新开始,比如某一玩家赢,或者平局 char game[3][3]= {

{'1','2','3'}, {'4','5','6'}, {'7','8','9'} };

期末大作业

int choice=0; //选择填在哪个格,定位

int row=0; //行 int column=0; //列

int player=0; //玩家值,玩家1或玩家2

int re; //一方赢或者平局的时候选择重新玩还是退出,1:restart 0:exit

printf(" | | \n");

printf(" %c | %c | %c \n",game[0][0],game[0][1],game[0][2]); printf(" | | \n");

printf(" ------+------+------\n"); printf(" | | \n");

printf(" %c | %c | %c \n",game[1][0],game[1][1],game[1][2]); printf(" | | \n");

printf(" ------+------+------\n");

printf(" | | \n");

printf(" %c | %c | %c \n",game[2][0],game[2][1],game[2][2]); printf(" | | \n");

for(int i=1;i<=9;++i)

{

rechoice:; //在选择错误的时候跳到这里重新选择,比如选择了一个已经画了的地方 if(i%2!=0) { player=1; printf("\n玩家1请输入:"); } else

{ player=2; printf("\n玩家2请输入:"); }

scanf("%d",&choice);

if(choice>=1 && choice<=9)

{ //当小在1和9之间的时候才是正确的选择 //定位行 if(choice<=3)

{ row=0; }

else if(choice >=4 && choice <=6) {

row = 1; } else

期末大作业

row = 2; }//定位列

if(choice==1 ||choice==4 || choice == 7) {

column=0; }

else if(choice==2 || choice==5 || choice==8) {

column=1; } else {

column=2;

} }else

{ fflush(stdin); //清楚输入缓冲区,防止输入字母的或其他的字符的时候出现致命错误(会重复输出下面一句)

printf("输入错误! 请重新输入!\n\n"); Sleep(2000); //等待2秒

goto rechoice; //重新选择下在哪里 } if(player==1){ //如果是玩家1则画O,

}

if(game[row][column]!='O' && game[row][column]!='X') { //这一句规定已经画了的地方不能再选择 game[row][column]='O'; }else {

printf("您不能选择这里!\n\n");

goto rechoice; //重新选择下在哪里 }

}else

{

if(game[row][column]!='O' && game[row][column]!='X') {

game[row][column]='X'; }else

{

printf("您不能选择这里!\n"); goto rechoice;

期末大作业

printf("\n\n"); //打印刚刚操作的地方 printf(" | | \n");

printf(" %c | %c | %c \n",game[0][0],game[0][1],game[0][2]); printf(" | | \n");

printf(" ------+------+------\n"); printf(" | | \n");

printf(" %c | %c | %c \n",game[1][0],game[1][1],game[1][2]); printf(" | | \n");

printf(" ------+------+------\n");

printf(" | | \n");

printf(" %c | %c | %c \n",game[2][0],game[2][1],game[2][2]); printf(" | | \n");

//判断输赢(对角线)

if(game[0][0]==game[1][1] && game[0][0]==game[2][2] || game[0][2]==game[1][1] && game[0][2]==game[2][0]){

printf("\n玩家 %d 赢!\n\n",player); printf("[1] 重新开始\t[0] 退出\n"); int re; //选择重玩还是退出 scanf("%d",&re); if(re==1) {

system("cls"); //清屏

goto start; //跳至游戏开始处,就是本程序的开始 } else {

goto exit; }

//退出

}

//判断输赢(行和列)

for(int j=0;j<=2;++j){

if(game[j][0]==game[j][1] && game[j][0]==game[j][2] || game[0][j]==game[1][j] && game[0][j]== game[2][j])

{

printf("玩家 %d 赢!\n\n",player); printf("[1] 重新开始\t[0] 退出\n"); scanf("%d",&re); if(re==1) { system("cls");

期末大作业

goto start;

} else { goto exit; } } } //平局

printf("\n\n平局!!\n\n");

printf("[1] 重新开始\t[0] 退出\n"); scanf("%d",&re); if(re==1) {

system("cls");

goto start; //跳至游戏开始处重新开始,即程序开始处 } else {

goto exit; }

exit:; return 0; }

//退出

}

4、运行结果

期末大作业

期末大作业

本文来源:https://www.bwwdw.com/article/k0o1.html

Top