附:
C语言实现计算器完整代码:https://blog.csdn.net/qq_41915690/article/details/80466865
(破败圣迹之逃出生天)使用设计说明
Design By 海上的雨
1 软件介绍(使用说明)
用w、a、s、d或者W、A、S、D分别控制角色的移动(上、左、下、右),使目标向○处逃生!触碰◎则死亡!逃生或死亡则游戏结束。
游戏开始界面↓
死亡界面↓
逃生界面↓
2 函数设计(设计思路)
图形构成
破败圣迹之逃出生天由主角、墙壁、道路、逃生标志、死亡标志、装饰符以及文字构成。自建一个txt文档储存数据,用数字1代替墙壁"▓",2代表角色"♀" ,3代表道路" ",4代表文字"破败圣迹之逃出生天"、5代表装饰符"卐"、6代表装饰符"卍"、7代表逃生标志"○"、*代表死亡标志"◎"来构成图形化界面。
使用voidshuru(char shuju[29][26],int *a,int *b);以及 void shuchu(char shuju[29][26],int *a,int*b);这两个函数对txt文档进行提取和显示。其中voidshuru(char shuju[29][26],int *a,int *b)函数作用是从文件中读取信息,并将数据存放于二维数组shuju[29][26]中,*a与*b记录角色的位置。void shuchu(char shuju[29][26],int *a,int *b)函数的作用是从二维数组shuju[29][26]中读信息,并根据shuju[29][26]中的各个值输出相应的符号。
以下为实现代码:
void shuru(char shuju[29][26],int *a,int*b)
{
inti=0,j=0;
FILE*fp;
char ch;
if((fp=fopen("破败圣迹之逃出生天.txt","r"))==NULL)
{
printf("文件路径不正确!");
exit(1);
}
ch=fgetc(fp);
while(ch!=EOF)
{
if(ch=='1')
{
shuju[i][j]=ch;
j++;
if(j==26)
{
i++;
j=0;
}
}
elseif(ch=='2')
{
shuju[i][j]=ch;
(*a)=i;
(*b)=j;
j++;
if(j==26)
{
i++;
j=0;
}
}
elseif(ch=='3')
{
shuju[i][j]=ch;
j++;
if(j==26)
{
i++;
j=0;
}
}
else
{
shuju[i][j]=ch;
j++;
if(j==26)
{
i++;
j=0;
}
}
ch=fgetc(fp);
}
fclose(fp);
}
void shuchu(char shuju[29][26],int *a,int*b)
{
inti,j;
system("cls");
for(i=0;i<29;i++)
for(j=0;j<26;j++)
{
if(shuju[i][j]=='1')
printf("▓");
elseif(shuju[i][j]=='2')
{
printf("♀");
(*a)=i;
(*b)=j;
}
elseif(shuju[i][j]=='3')
{
printf(" ");
}
elseif(shuju[i][j]=='4')
{
printf("破败圣迹之逃出生天");
}
elseif(shuju[i][j]=='5')
{
printf("卐");
}
elseif(shuju[i][j]=='6')
{
printf("卍");
}
elseif(shuju[i][j]=='7')
{
printf("○");
}
elseif(shuju[i][j]=='*')
{
printf("◎");
}
elseif(shuju[i][j]=='8')
{
printf("W:向上移动\tS:向下移动");
}
elseif(shuju[i][j]=='9')
{
printf("A:向左移动\tD:向右移动");
}
/*elseif(shuju[i][j]=='*')
{
printf("A:向左移动");
}*/
/*elseif(shuju[i][j]=='/')
{
printf("D:向右移动");
}*/
elseif(shuju[i][j]=='+')
{
printf("向○处逃生!触碰◎则死亡!");
}
else
{
putchar(shuju[i][j]);
}
}
printf("\n");
}
主角移动、死亡、逃生的实现
定义二维数组用来记录各个位置。可以理解为用坐标表示位置,当键入w/a/s/d通过getch()对玩家输入的控制键进行不显示的读取,然后对shuju [i][j]进行相应的改变,之后运行shuchu(shuju,&a,&b)进行输出绘图,从而完成了角色"♀"的移动。为了保证角色不向墙壁移动,在调换shuju [i][j]的内容时调用if语句进行相关设定。同理,当主角走入死亡标记"◎"或逃生标记"○"时通过调制if语句对游戏进行死亡或逃生的展现。
以下为对应代码:
ch=getch();
while(1)
{
switch(ch)
{
case 'w':
case 'W':
{
if(shuju[a-1][b]=='3'||shuju[a-1][b]=='*')
{
c=shuju[a-1][b];
shuju[a-1][b]=shuju[a][b];
shuju[a][b]=c;
shuchu(shuju,&a,&b);
}
break;
}
case 'a':
case 'A':
{
if(shuju[a][b-1]=='3'||shuju[a][b-1]=='*')
{
c=shuju[a][b-1];
shuju[a][b-1]=shuju[a][b];
shuju[a][b]=c;
shuchu(shuju,&a,&b);
}
break;
}
case 's':
case 'S':
{
if(shuju[a+1][b]=='3'||shuju[a+1][b]=='*')
{
c=shuju[a+1][b];
shuju[a+1][b]=shuju[a][b];
shuju[a][b]=c;
shuchu(shuju,&a,&b);
}
break;
}
case 'd':
case 'D':
{
if(shuju[a][b+1]=='3'||shuju[a][b+1]=='*')
{
c=shuju[a][b+1];
shuju[a][b+1]=shuju[a][b];
shuju[a][b]=c;
shuchu(shuju,&a,&b);
}
break;
}
}
if(shuju[22][23]=='2')
{
printf("你已逃出生天!\n");
break;
}
if(shuju[3][13]=='2'||shuju[3][19]=='2'||shuju[9][5]=='2'||shuju[7][20]=='2'||shuju[12][19]=='2'||shuju[17][13]=='2'||shuju[23][19]=='2')
{
printf("你已死亡!\n");
break;
}
ch=getch();
}
}
数据的读取
由”图形构成”部分可知,我们已经将有代表意义的1.2.3···等数据排列在一个txt文档里。然后通过(fp=fopen("破败圣迹之逃出生天.txt","r"))==NULL确认文件是否存在,并读取数据存入fp中。然后对fp进行操作,实现数据的读取。
以下为实现代码:
void shuru(char shuju[29][26],int *a,int*b)
{
inti=0,j=0;
FILE*fp;
char ch;
if((fp=fopen("破败圣迹之逃出生天.txt","r"))==NULL)
{
printf("文件路径不正确!");
exit(1);
}
ch=fgetc(fp);
while(ch!=EOF)
{
if(ch=='1')
{
shuju[i][j]=ch;
j++;
if(j==26)
{
i++;
j=0;
}
}
elseif(ch=='2')
{
shuju[i][j]=ch;
(*a)=i;
(*b)=j;
j++;
if(j==26)
{
i++;
j=0;
}
}
elseif(ch=='3')
{
shuju[i][j]=ch;
j++;
if(j==26)
{
i++;
j=0;
}
}
else
{
shuju[i][j]=ch;
j++;
if(j==26)
{
i++;
j=0;
}
}
ch=fgetc(fp);
}
fclose(fp);
游戏结束
通过while(1)语句当满足设定的if语句并break出时则游戏接触。
以下为实现代码:
while(1)
{
if(shuju[22][23]=='2')
{
printf("你已逃出生天!\n");
break;
}
if(shuju[3][13]=='2'||shuju[3][19]=='2'||shuju[9][5]=='2'||shuju[7][20]=='2'||shuju[12][19]=='2'||shuju[17][13]=='2'||shuju[23][19]=='2')
{
printf("你已死亡!\n");
break;
}
ch=getch();
}
}
3 数据结构
Ø void shuru(char shuju[29][26],int *a,int *b);函数用与对储存数字以及字符的txt文档进行读取、转化、存储。
Ø void shuchu(char shuju[29][26],int *a,int *b);函数用于通过设定不用的数字及字符代表相应的意义,对shuju[i][j]进行绘制。
Ø getch();函数用于对输入的数据不进行显示而是直接保存,使游戏界面清洁。
Ø while(1)
{
switch(ch)
{
If()
{
}
If()
{
}
Ch=getch();
}
} 函数用于设定通过键入的案件对shuju[a][b]内的数据进行相应的改变并进行游戏胜利与失败的设定。
Ø FILE *fp;
char ch;
if((fp=fopen("破败圣迹之逃出生天.txt","r"))==NULL)
{
} 函数对存放数据的txt文档进行读取并保存于fp。
Ø while(ch!=EOF)
{
If()
{
}
} 函数表示当ch不是标准输入的结尾时运行if语句。
Ø system("cls");函数用于清屏,使用户在操作后能够使用一个新的界面。
4 最后
设计感悟
² C语言程序图形化界面的行程可以先用数字或字符替代,然后进行读取操作。方便快捷,可修改性强。
² 把文件中的数据读到数组中,可以减少文本的读取次数。
C语言感悟
² 设计程序时多运行测试,多以用户的角度进行思考,对程序源代码进行不断地完善。
² 程序工程量大时在源代码中做好注释,可以在浏览时能够更直观、快速的浏览代码。
² 程序工程量较大时需要考虑先编写整体结构,然后对源代码进行改善。
² 编程中有许多类似的代码行,善于运用复制粘贴可以加快编程速度。
² 遇到无法实现的地方多运用网络资源或向先导求知,能够快速丰富自己的C语言知识库。
-
#include<stdio.h>
-
#include<stdlib.h>
-
#include<conio.h>
-
void main()
-
{
-
void shuru(char shuju[29][26],int *a,int *b);
-
void shuchu(char shuju[29][26],int *a,int *b);
-
int a,b;
-
char ch,c;
-
char shuju[
29][
26];
-
shuru(shuju,&a,&b);
-
shuchu(shuju,&a,&b);
-
ch=getch();
-
while(
1)
-
{
-
switch(ch)
-
{
-
case
'w':
-
case
'W':
-
{
-
if(shuju[a
-1][b]==
'3'||shuju[a
-1][b]==
'*')
-
{
-
c=shuju[a
-1][b];
-
shuju[a
-1][b]=shuju[a][b];
-
shuju[a][b]=c;
-
shuchu(shuju,&a,&b);
-
}
-
break;
-
}
-
case
'a':
-
case
'A':
-
{
-
if(shuju[a][b
-1]==
'3'||shuju[a][b
-1]==
'*')
-
{
-
c=shuju[a][b
-1];
-
shuju[a][b
-1]=shuju[a][b];
-
shuju[a][b]=c;
-
shuchu(shuju,&a,&b);
-
}
-
break;
-
}
-
case
's':
-
case
'S':
-
{
-
if(shuju[a+
1][b]==
'3'||shuju[a+
1][b]==
'*')
-
{
-
c=shuju[a+
1][b];
-
shuju[a+
1][b]=shuju[a][b];
-
shuju[a][b]=c;
-
shuchu(shuju,&a,&b);
-
}
-
break;
-
}
-
case
'd':
-
case
'D':
-
{
-
if(shuju[a][b+
1]==
'3'||shuju[a][b+
1]==
'*')
-
{
-
c=shuju[a][b+
1];
-
shuju[a][b+
1]=shuju[a][b];
-
shuju[a][b]=c;
-
shuchu(shuju,&a,&b);
-
}
-
break;
-
}
-
}
-
if(shuju[
22][
23]==
'2')
-
{
-
printf(
"你已逃出生天!\n");
-
break;
-
}
-
if(shuju[
3][
13]==
'2'||shuju[
3][
19]==
'2'||shuju[
9][
5]==
'2'||shuju[
7][
20]==
'2'||shuju[
12][
19]==
'2'||shuju[
17][
13]==
'2'||shuju[
23][
19]==
'2')
-
{
-
printf(
"你已死亡!\n");
-
break;
-
}
-
ch=getch();
-
}
-
}
-
void shuru(char shuju[29][26],int *a,int *b)
-
{
-
int i=
0,j=
0;
-
FILE *fp;
-
char ch;
-
if((fp=fopen(
"破败圣迹之逃出生天.txt",
"r"))==
NULL)
-
{
-
printf(
"文件路径不正确!");
-
exit(
1);
-
}
-
ch=fgetc(fp);
-
while(ch!=EOF)
-
{
-
if(ch==
'1')
-
{
-
-
shuju[i][j]=ch;
-
j++;
-
if(j==
26)
-
{
-
i++;
-
j=
0;
-
}
-
}
-
else
if(ch==
'2')
-
{
-
-
shuju[i][j]=ch;
-
(*a)=i;
-
(*b)=j;
-
j++;
-
if(j==
26)
-
{
-
i++;
-
j=
0;
-
}
-
}
-
else
if(ch==
'3')
-
{
-
shuju[i][j]=ch;
-
j++;
-
if(j==
26)
-
{
-
i++;
-
j=
0;
-
}
-
}
-
else
-
{
-
shuju[i][j]=ch;
-
j++;
-
if(j==
26)
-
{
-
i++;
-
j=
0;
-
}
-
}
-
ch=fgetc(fp);
-
}
-
fclose(fp);
-
}
-
void shuchu(char shuju[29][26],int *a,int *b)
-
{
-
int i,j;
-
system(
"cls");
-
for(i=
0;i<
29;i++)
-
for(j=
0;j<
26;j++)
-
{
-
if(shuju[i][j]==
'1')
-
printf(
"▓");
-
else
if(shuju[i][j]==
'2')
-
{
-
printf(
"♀");
-
(*a)=i;
-
(*b)=j;
-
}
-
else
if(shuju[i][j]==
'3')
-
{
-
printf(
" ");
-
}
-
else
if(shuju[i][j]==
'4')
-
{
-
printf(
"破败圣迹之逃出生天");
-
}
-
else
if(shuju[i][j]==
'5')
-
{
-
printf(
"卐");
-
}
-
else
if(shuju[i][j]==
'6')
-
{
-
printf(
"卍");
-
}
-
else
if(shuju[i][j]==
'7')
-
{
-
printf(
"○");
-
}
-
else
if(shuju[i][j]==
'*')
-
{
-
printf(
"◎");
-
}
-
else
if(shuju[i][j]==
'8')
-
{
-
printf(
"W:向上移动\tS:向下移动");
-
}
-
else
if(shuju[i][j]==
'9')
-
{
-
printf(
"A:向左移动\tD:向右移动");
-
}
-
/*else if(shuju[i][j]=='*')
-
{
-
printf("A:向左移动");
-
}*/
-
/*else if(shuju[i][j]=='/')
-
{
-
printf("D:向右移动");
-
}*/
-
else
if(shuju[i][j]==
'+')
-
{
-
printf(
"向○处逃生!触碰◎则死亡!");
-
}
-
else
-
{
-
putchar(shuju[i][j]);
-
}
-
}
-
printf(
"\n");
-
}
转载:https://blog.csdn.net/qq_41915690/article/details/80463892