c语言小游戏.docx

上传人:b****6 文档编号:7566803 上传时间:2023-01-25 格式:DOCX 页数:48 大小:159.46KB
下载 相关 举报
c语言小游戏.docx_第1页
第1页 / 共48页
c语言小游戏.docx_第2页
第2页 / 共48页
c语言小游戏.docx_第3页
第3页 / 共48页
c语言小游戏.docx_第4页
第4页 / 共48页
c语言小游戏.docx_第5页
第5页 / 共48页
点击查看更多>>
下载资源
资源描述

c语言小游戏.docx

《c语言小游戏.docx》由会员分享,可在线阅读,更多相关《c语言小游戏.docx(48页珍藏版)》请在冰豆网上搜索。

c语言小游戏.docx

c语言小游戏

2

3

4

5

6

7

8

#include

main()

{

 int a=0,b=0,c=0;

 if(a++>0&&b++>0)//此处先判断a>0为假,执行a+1,与运算,第一个判断为假,其值肯定为假,后面的都不执行了,而且跳出if语句体,也就是b++没有 执行,++c也没有执行

 ++c;

 printf("\na=%d,b=%d,c=%d",a,b,c);

 

C语言实现的猜拳游戏(剪子锤子布),让你与电脑对决

这是一个简单的猜拳游戏(剪子包子锤),让你与电脑对决。

你出的拳头由你自己决定,电脑则随机出拳,最后判断胜负。

下面的代码会实现一个猜拳游戏,让你与电脑对决。

你出的拳头由你自己决定,电脑则随机出拳,最后判断胜负。

启动程序后,让用户出拳,截图:

用户出拳,显示对决结果:

截图:

代码实现:

#include

#include

#include

intmain()

{

chargamer;//玩家出拳

intcomputer;//电脑出拳

intresult;//比赛结果

//为了避免玩一次游戏就退出程序,可以将代码放在循环中

while

(1){

printf("这是一个猜拳的小游戏,请输入你要出的拳头:

\n");

printf("A:

剪刀\nB:

石头\nC:

布\nD:

不玩了\n");

scanf("%c%*c",&gamer);

switch(gamer){

case65|97:

//A|a

gamer=4;break;

case66|98:

//B|b

gamer=7;break;

case67|99:

//C|c

gamer=10;break;

case68|100:

//D|d

return0;

default:

printf("你的选择为%c选择错误,退出...\n",gamer);

getchar();

system("cls");//清屏

return0;

break;

}

srand((unsigned)time(NULL));//随机数种子

computer=rand()%3;//产生随机数并取余,得到电脑出拳

result=(int)gamer+computer;//gamer为char类型,数学运算时要强制转换类型

printf("电脑出了");

switch(computer)

{

case0:

printf("剪刀\n");break;//41

case1:

printf("石头\n");break;//72

case2:

printf("布\n");break;//103

}

printf("你出了");

switch(gamer)

{

case4:

printf("剪刀\n");break;

case7:

printf("石头\n");break;

case10:

printf("布\n");break;

}

if(result==6||result==7||result==11)printf("你赢了!

");

elseif(result==5||result==9||result==10)printf("电脑赢了!

");

elseprintf("平手");

system("pause>nul&&cls");//暂停并清屏

}

return0;

}

代码分析

1)首先,我们需要定义3个变量来储存玩家出的拳头(gamer)、电脑出的拳头(computer)和最后的结果(result),然后给出文字提示,让玩家出拳。

接下来接收玩家输入:

scanf("%c%*c",&gamer);

注意:

由于每次输入以回车结束,缓冲区中除了玩家输入的字母,还有回车符。

回车符要跳过,以免影响下次输入。

Scanf()函数的格式控制字符串个数可以多于参数个数,scanf("%c%*c",&gamer);的作用是从缓冲区多输出一个字符(回车符),却不赋给任何变量。

玩家输入结束,使用switch语句判断输入内容,65(A)、97(a)、66(B)、98(b)、67(C)、99(c)、68(D)、100(d)为相应字符的ASCII码。

注意:

system("cls");语句的作用是清屏。

System()函数用来执行dos命令,这里相当于在dos里输入cls命令。

2)玩家出拳结束,电脑开始出拳。

电脑通过产生随机数来出拳:

srand((unsigned)time(NULL));//为了避免多次运行结果相同,故在前面加入上(需要time.h)

computer=rand()%3;//获取0~2的随机数

最后通过玩家和电脑出拳的和来判断输赢:

result=(int)gamer+computer;

//...

if(result==6||result==7||result==11)printf("你赢了!

");

elseif(result==5||result==9||result==10)printf("电脑赢了!

");

elseprintf("平手");

这是一个很巧妙的算法,玩家和电脑出拳不同,result的值就不同,且不会重复,见下表:

电脑--玩家

石头(4)

剪刀(7)

布(10)

石头(0)

4

7

10

剪刀

(1)

5

8

11

(2)

6

9

12

3)每次猜拳结束,暂停并清屏,进入下一次猜拳:

system("pause>nul&&cls");//暂停运行和清屏

C语言输出九九乘法表(5种解法)

九九乘法表共9行9列,重点考察for循环的掌握情况。

下面给出了输出完整乘法表、右上、右下、左上、左下乘法表的代码。

【代码一】输出完整的三角形:

#include

intmain(){

inti,j;//i,j控制行或列

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

for(j=1;j<=9;j++)

//%2d控制宽度为两个字符,且右对齐;如果改为%-2d则为左对齐

//\t为tab缩进

printf("%d*%d=%2d\t",i,j,i*j);

printf("\n");

}

return0;

}

运行结果:

1*1=11*2=21*3=31*4=41*5=51*6=61*7=71*8=81*9=9

2*1=22*2=42*3=62*4=82*5=102*6=122*7=142*8=162*9=18

3*1=33*2=63*3=93*4=123*5=153*6=183*7=213*8=243*9=27

4*1=44*2=84*3=124*4=164*5=204*6=244*7=284*8=324*9=36

5*1=55*2=105*3=155*4=205*5=255*6=305*7=355*8=405*9=45

6*1=66*2=126*3=186*4=246*5=306*6=366*7=426*8=486*9=54

7*1=77*2=147*3=217*4=287*5=357*6=427*7=497*8=567*9=63

8*1=88*2=168*3=248*4=328*5=408*6=488*7=568*8=648*9=72

9*1=99*2=189*3=279*4=369*5=459*6=549*7=639*8=729*9=81

【代码二】输出右上三角形和左上三角形:

#include

intmain(){

inti,j;

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

for(j=1;j<=9;j++){

if(j

//打印八个空格,去掉空格就是左上三角形

printf("");

else

printf("%d*%d=%2d",i,j,i*j);

}

printf("\n");

}

return0;

}

运行结果:

1*1=11*2=21*3=31*4=41*5=51*6=61*7=71*8=81*9=9

2*2=42*3=62*4=82*5=102*6=122*7=142*8=162*9=18

3*3=93*4=123*5=153*6=183*7=213*8=243*9=27

4*4=164*5=204*6=244*7=284*8=324*9=36

5*5=255*6=305*7=355*8=405*9=45

6*6=366*7=426*8=486*9=54

7*7=497*8=567*9=63

8*8=648*9=72

9*9=81

去掉八个空格后的运行结果:

1*1=11*2=21*3=31*4=41*5=51*6=61*7=71*8=81*9=9

2*2=42*3=62*4=82*5=102*6=122*7=142*8=162*9=18

3*3=93*4=123*5=153*6=183*7=213*8=243*9=27

4*4=164*5=204*6=244*7=284*8=324*9=36

5*5=255*6=305*7=355*8=405*9=45

6*6=366*7=426*8=486*9=54

7*7=497*8=567*9=63

8*8=648*9=72

9*9=81

【代码三】输出右下和左下三角形:

#include

intmain(){

inti,j,n;

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

//将下面的for循环注释掉,就输出左下三角形

for(n=1;n<=9-i;n++)

printf("");

for(j=1;j<=i;j++)

printf("%d*%d=%2d",i,j,i*j);

printf("\n");

}

return0;

}

运行结果:

1*1=1

2*1=22*2=4

3*1=33*2=63*3=9

4*1=44*2=84*3=124*4=16

5*1=55*2=105*3=155*4=205*5=25

6*1=66*2=126*3=186*4=246*5=306*6=36

7*1=77*2=147*3=217*4=287*5=357*6=427*7=49

8*1=88*2=168*3=248*4=328*5=408*6=488*7=568*8=64

9*1=99*2=189*3=279*4=369*5=459*6=549*7=639*8=729*9=81

去掉循环后的运行结果:

1*1=1

2*1=22*2=4

3*1=33*2=63*3=9

4*1=44*2=84*3=124*4=16

5*1=55*2=105*3=155*4=205*5=25

6*1=66*2=126*3=186*4=246*5=306*6=36

7*1=77*2=147*3=217*4=287*5=357*6=427*7=49

8*1=88*2=168*3=248*4=328*5=408*6=488*7=568*8=64

9*1=99*2=189*3=279*4=369*5=459*6=549*7=639*8=729*9=81

C语言文件加密解密软件

文件加密解密是常用的一个功能,可以很好的保护你的隐私内容;本软件简单的实现了文件加密解密的功能。

为了防止别人随意使用软件,软件本身也有一个密码,必须输入密码才能使用软件。

软件的功能有:

∙加密文件:

打开需要加密的文件,输入密钥,将加密的文件保存;

∙解密文件:

打开需要解密的文件,输入密钥,将解密的文件保存;

∙修改密码:

可以临时修改软件的使用密码,但是软件重启后会被重置;

∙退出程序:

完成工作后退出。

软件使用流程

1)启动软件,输入密码

软件启动后,必须输入密码才能使用(默认密码为123456)。

用户有3次输入密码的机会,连续3次输入错误软件将自动退出。

截图如下:

图1 软件启动时校验密码

2)密码校验正确,显示功能菜单

密码校验完成后,会显示功能菜单,让用户选择要进行的操作,如下图所示:

图2 软件菜单

3)用户选择要进行的操作

①文件加密:

输入1并回车,进入文件加密功能,要求用户输入要加密的文件名、密钥、保存加密内容的文件。

在D盘下创建文件demo.txt,输入一些文本,对该文件进行加密。

加密成功后,用记事本打开加密的文件,看到的全部是乱码,截图如下:

图3 加密成功

如果输入的文件路径错误,或者打开/创建文件失败,将导致加密失败,截图如下:

图4 加密失败

注意:

文件名要包含路径,只有文件名表示当前程序所在文件夹下的文件。

②文件解密:

回到主菜单,输入2并回车,进入文件解密功能,同样要求用户输入要解密的文件、密钥和保存解密内容的文件。

输入上次加密的文件,将解密后的文件保存到demo2.txt,解密成功后打开demo2.txt,可以看到被还原的具有可读性的内容。

截图如下:

图5 解密文件成功

③修改密码:

回到主菜单,输入3并回车,进入密码修改功能。

修改密码前要求用户输入原来的密码,并两次输入新密码,保证不会误输入。

截图如下:

图6 修改密码成功

④退出系统:

回到主菜单,输入0退出软件。

对于该软件,我们提供了详细的说明文档,包括软件的使用、设计思路、重要知识点以及常用的编程技巧,并且在代码中做了详细的注释。

软件、说明文档及源码下载地址:

  提取密码:

l2aw

C语言写的简单的定时关机程序

写一个定时关机的小程序,可以立即关闭计算机,也可以一段时间后关闭计算机。

这里主要考察system()命令。

代码实现:

#include

#include

#include

intmain()

{

charcmd[20]="shutdown-s-t";

chart[5]="0";

intc;

system("titleC语言关机程序");//设置cmd窗口标题

system("modeconcols=48lines=25");//窗口宽度高度

system("colorf0");//可以写成red调出颜色组

system("date/T");

system("TIME/T");

printf("-----------C语言关机程序-----------\n");

printf("1.实现10分钟内的定时关闭计算机\n");

printf("2.立即关闭计算机\n");

printf("3.注销计算机\n");

printf("0.退出系统\n");

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

scanf("%d",&c);

switch(c){

case1:

printf("您想在多少秒后自动关闭计算机?

(0~600)\n");

scanf("%s",t);

system(strcat(cmd,t));

break;

case2:

system("shutdown-p");

break;

case3:

system("shutdown-l");

break;

case0:

break;

default:

printf("Error!

\n");

}

system("pause");

return0;

}

这个程序虽然实用价值不大,但是可以让我们了解system()函数。

在Windows下,system()函数可以执行dos命令;在Unix/Linux中,可以执行Shell。

请在Windows下运行上面的程序。

程序中对dos界面的设置和关机功能都是通过dos命令实现的。

你肯定听过内存溢出吧?

通俗地理解就是内存不够。

在运行某些比较吃内存的程序的时候,他们所需要的内存超出了你的电脑能承受的大小,系统会提示内存不足,有时候程序会自动退出。

请用C语言写一个简单的内存溢出的例子。

#include

#include

intmain(){

while

(1){//死循环

malloc

(1);//分配一个字节长度的内存

}

return0;

}

不要害怕,编译试试,打开任务管理器,可以看到你的内存占用直飚上去,再等等,程序会出错。

这时候windows的内存管理机制发现了问题,把这个程序给终结了,防止系统奔溃(其他的系统也有相应的措施)。

C语言动态数组的实现:

数组长度随数组元素改变,不会溢出,不会浪费资源

我们知道,C语言中的数组大小是固定的,定义的时候必须要给一个常量值,不能是变量。

这带来了很大的不便,如果数组过小,不能容下所有数组,如果过大,浪费资源。

请实现一个简单的动态数组,能够随时改变大小,不会溢出,也不会浪费内存空间。

下面的代码实现了简单的动态数组:

#include

#include

intmain()

{

//从控制台获取初始数组大小

intN;

int*a;

inti;

printf("Inputarraylength:

");

scanf("%d\n",&N);

//分配空间

a=(int*)calloc(N,sizeof(int));

//填充数据

for(i=0;i

a[i]=i+1;

printf("%-5d",a[i]);

if((i+1)%10==0){

printf("\n");

}

}

//释放内存

free(a);

a=NULL;

printf("\n");

return0;

}

运行结果:

Inputarraylength:

20

12345678910

11121314151617181920

一道题目,玩转C语言指针数组和指向指针的指针

请先看下面的代码:

#include

#include

intmain(){

char*lines[5]={

"COSC1283/1284",

"Programming",

"Techniques",

"is",

"greatfun"

};

char*str1=lines[1];

char*str2=*(lines+3);

charc1=*(*(lines+4)+6);

charc2=(*lines+5)[5];

charc3=*lines[0]+2;

printf("str1=%s\n",str1);

printf("str2=%s\n",str2);

printf("c1=%c\n",c1);

printf("c2=%c\n",c2);

printf("c3=%c\n",c3);

returnEXIT_SUCCESS;

}

运行结果:

str1=Programming

str2=is

c1=f

c2=2

c3=E

看下面的分析之前,请先了解指针数组和指向指针的指针的基本概念,如果你不了解,先看下面的文章:

∙指针数组:

∙指向指针的指针:

为了更加直观,把上面的数组改成下面的形式:

#include

#include

intmain(){

char*string0="COSC1283/1284";

char*string1="Programming";

char*string2="Techniques";

char*string3="is";

char*string4="greatfun";

char*lines[5];

lines[0]=string0;

lines[1]=string1;

lines[2]=string2;

lines[3]=string3;

lines[4]=string4;

char*str1=lines[1];

char*str2=*(lines+3);

charc1=*(*(lines+4)+6);

charc2=(*lines+5)[5];

charc3=*lines[0]+2;

printf("str1=%s\n",str1);

printf("str2=%s\n",str2);

printf("c1=%c\n",c1);

printf("c2=%c\n",c2);

printf("c3=%c\n",c3);

returnEXIT_SUCCESS;

}

这样,或许会清晰很多,char*lines[5];定义了一个指针数组,数组的每一个元素都是指向char类型的指针。

最后5行,为数组的每一个元素赋值,都是直接赋给指针。

而lines,是一个指向指针的指针,它的类型为char**,所以*lines是一个指向字符的指针,**lines是一个具体的字符。

这一点很重要,一定要明白。

指针是可以进行运算的,lines为lines[5]数组的首地址,即第0个元素的地址;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 少儿英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1