c语言小游戏.docx
- 文档编号:30177949
- 上传时间:2023-08-05
- 格式:DOCX
- 页数:58
- 大小:159.34KB
c语言小游戏.docx
《c语言小游戏.docx》由会员分享,可在线阅读,更多相关《c语言小游戏.docx(58页珍藏版)》请在冰豆网上搜索。
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个元素的地址;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 小游戏