有什么好玩的C语言小程序

有什么好玩的C语言小程序,第1张

一个“歼灭敌机”的小游戏,DEVc++编译通过:

#include <stdio.h>

#include <conio.h>

#include <stdlib.h>

#include <windows.h>

#include <time.h>

#define zlx 10  //增量坐标(x)让游戏框不靠边

#define zly 3   //增量坐标(y)让游戏框不靠边

#define W 26  //游戏框的宽度

#define H 24  //游戏框的高度

int jiem[22][22]={0}, wj=10  //界面数组, 我机位置(初值为10)

int speed=4,density=30, score=0,death=0//敌机速度, 敌机密度, 玩家成绩,死亡次数

int m=0,n=0 // m,n是控制敌机的变量

void gtxy (int x, int y)  //控制光标位置的函数

{ COORD pos

pos.X = x  pos.Y = y

SetConsoleCursorPosition ( GetStdHandle (STD_OUTPUT_HANDLE), pos )

}

void Color(int a)  //设定颜色的函数(a应为1-15)

{ SetConsoleTextAttribute( GetStdHandle(STD_OUTPUT_HANDLE), a )}

void yinc(int x=1,int y=0)   //隐藏光标的函数

{ CONSOLE_CURSOR_INFO  gb={x,y}   //y设为0即隐藏

SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &gb)

}

void csh( )  //初始化函数

{ int i

Color(7)

gtxy(zlx,zly)printf("╔")  gtxy(zlx+W-2,zly)printf("╗")  //左上角和右上角的框角

gtxy(zlx,zly+H-1)printf("╚")gtxy(zlx+W-2,zly+H-1)printf("╝")//下边两框角

for(i=2i<W-2i+=2) {gtxy(zlx+i,zly)  printf("═")}      //打印上横框

for(i=2i<W-2i+=2) {gtxy(zlx+i,zly+H-1)printf("═")}  //打印下横框

for(i=1i<H-1i++) { gtxy(zlx,zly+i) printf("║")}       //打印左竖框

for(i=1i<H-1i++) {gtxy(zlx+W-2,zly+i)printf("║")}  //打印右竖框

Color(14)gtxy(19,2)printf("歼灭敌机")Color(10)

gtxy(37,5)printf("设置:Esc ")

gtxy(37,7)printf("发射:↑ ")

gtxy(37,9)printf("控制:← → ")

gtxy(37,11)printf("得分:%d",score)

gtxy(37,13)printf("死亡:%d",death)

yinc(1,0)

}

void qcjm( )  //清除界面函数

{int i,j

for(i=0i<H-2i++)

for(j=0j<W-4j++){gtxy(zlx+2+j,zly+1+i)printf(" ")}

}

void feiji( )  //飞机移动函数

{int i,j

for(i=21i>=0i--)  //从底行往上是为了避免敌机直接冲出数组

  for(j=0j<22j++)

     {if(i==21&&jiem[i][j]==3) jiem[i][j]=0  //底行赋值0 以免越界

       if(jiem[i][j]==3) jiem[i][j]=0, jiem[i+1][j]=3

     }

if(jiem[20][wj]==3&&jiem[21][wj]==1) death++

}

void zidan( )  //子d移动函数

{ int i,j

for(i=0i<22i++)

  for(j=0j<22j++)

     {if(i==0&&jiem[i][j]==2) jiem[i][j]=0

     if(jiem[i][j]==2) { if(jiem[i-1][j]==3) score+=100,printf("\7")

                                 jiem[i][j]=0,jiem[i-1][j]=2}

     }

}

void print(  )  //输出界面函数

{int i,j

qcjm( )

for(i=0i<22i++)

for(j=0j<22j++)

{ gtxy(12+j,4+i)

if(jiem[i][j]==3) {Color(13)printf("□")}

if(jiem[i][j]==2) {Color(10)printf(".")}

if(jiem[i][j]==1) {Color(10)printf("■")}

}

gtxy(37,11)Color(10)printf("得分:%d",score)

gtxy(37,13)printf("死亡:%d",death)

}

void setting( )  //游戏设置函数

{ qcjm( )

gtxy(12,4)printf("选择敌机速度:")

gtxy(12,5)printf("  1.快 2.中 3.慢>>")

switch(getche( ))

    {case '1': speed=2break

     case '2': speed=4break

     case '3': speed=5break

     default: gtxy(12,6)printf("  错误!默认值")

   }

gtxy(12,7)printf("选择敌机密度:")

gtxy(12,8)printf("  1.大 2.中 3.小>>")

switch(getche( ))

     {case '1': density=20break

case '2': density=30 break

case '3': density=40break

     default: gtxy(12,9)printf("  错误!默认值")

     }

for(int i=0i<22i++)

 for(int j=0j<22j++)jiem[i][j]=0

jiem[21][wj=10]=1jiem[0][5]=3

gtxy(12,10)printf("  按任意键保存...")

getch( )

qcjm( )

}

void run( )  //游戏运行函数

{ jiem[21][wj]=1  //值为1代表我机(2则为子d)

jiem[0][5]=3   //值为3代表敌机

SetConsoleTitle("歼灭敌机") //设置窗口标题

while(1)

{ if (kbhit( ))  //如有键按下,控制我机左右移动、发射或进行设定

     {int key

      if((key=getch( ))==224) key=getch( )

      switch(key)

      { case 75: if(wj>0) jiem[21][wj]=0,jiem[21][--wj]=1break

        case 77: if(wj<20) jiem[21][wj]=0,jiem[21][++wj]=1 break

        case 72: jiem[20][wj]=2break

       case 27: setting( )

      }

   }

   if(++n%density==0)  //控制产生敌机的速度

     { n=0srand((unsigned)time(NULL))

       jiem[0][rand( )%20+1]=3

     }

    if(++m%speed==0) {feiji( )m=0}  //控制敌机移动速度(相对子d而言)

    zidan( )

   print( )

Sleep(120) //延时120毫秒

  }

}

int main( )

{csh( )

 run( )

 return 0

}

新手要方便写代码,可以收藏下面几个自编函数:

SetConsoleTitle("俄罗斯方块")  //设置窗口左上角标题栏处出现"俄罗斯方块"5个字

srand( (unsigned) time(NULL) ) //初始化随机数发生器

n= rand(  ) % 20  //产生随机数0-19中的一个. 如 rand(  )%5 就产生0-4中的一个数

SetConsoleTitle(  )函数在<windows.h>里, srand(  )函数与rand(  )函数要配合用,

就是同时要用,在<stdlib.h>里。如果 rand( )%10+1 就产生1-10之中的一个数。

Sleep(300)  //延时300毫秒(就是程序暂停300毫秒后继续运行)

system("cls")  //清屏(把窗口里的内容全部清除,光标定于(0,0)位置处)

这两个函数都在<windows.h>里。开头4个自编函数 编写如下:

void gtxy (int x, int y)  //控制光标位置的函数

{ COORD pos

pos.X = x

pos.Y = y

SetConsoleCursorPosition ( GetStdHandle (STD_OUTPUT_HANDLE), pos )

}

void Color (int a)  //设定颜色的函数

{ SetConsoleTextAttribute ( GetStdHandle ( STD_OUTPUT_HANDLE ),a )}

void yinc (int x,int y)   //隐藏光标的函数

{ CONSOLE_CURSOR_INFO   gb={ x , y }  //gb代表光标

SetConsoleCursorInfo ( GetStdHandle(STD_OUTPUT_HANDLE),  &gb )

}

void kou(int w,int h)  //设置窗口大小的函数

{HANDLE  hl=GetStdHandle ( STD_OUTPUT_HANDLE )

COORD  size={ w , h }

SetConsoleScreenBufferSize( hl , size )

SMALL_RECT  rc={ 0, 0, w, h }

SetConsoleWindowInfo( hl, 1, &rc )

}

最后这个函数,参数w是宽h是高。里边5行中第一行定义了句柄型变量hl,并给它赋值。

第二行定义了坐标型结构体变量size,它的取值决定了缓冲区的大小。第三行就是使用

size的值设置好缓冲区大小。第四行定义了变量rc,它的值决定当前窗口显示的位置与

大小(不得超过缓冲区的大小)。前两个0,0是从缓冲区左上角0列0行位置处开始,后两

个参数可以小于w和h.比如 rc={0,0,w-10,h-5}最后一行使用rc的值设置好窗口,中间

那个参数要为" 1 "或写“ true ”才有效。

简单有趣的小程序有忆年共享相册、云梦助眠引导、番茄闹钟等。

1.  忆年共享相册:忆年是一款为用户提供免费的照片存储及共享的应用软件。界面非常简洁,可点击底部按钮生成相册,原图照片都储存在云端,不过期,支持批量上传和下载。在微信中一键邀请分享,能够和亲朋好友共享照片。

2.  云梦助眠引导:它是一款有专业音乐人打造的音频助眠应用。清爽的页面设计,精选了10个睡眠场景。舒缓的音乐+白噪音+人声催眠,专业度高。晚上睡不着觉是最让人头疼的事情了,这款专业的软件可以伴你迅速入眠。

3.  番茄闹钟:有别于一般的闹钟,你可以在接下来的25分钟选择一个任务然后专注的做这件事,番茄闹钟会开始计时。同时提供白噪音,让人专心沉浸在事物中。能够有效地使人集中精力做一件事,随时保持克制。

回#include<stdio.h> //标准输入、输出头文件

#include<string.h> //包含字符串函数处理头文件

#include<stdlib.h>//包含动态存储与释放函数头文件

#define N 10000

struct air //定义结构体数组

{

int num

char start[20]

char over[20]

char time[10]

int count

}s[N]

int i

int m=0

#define PRINT "%-d%12s%12s%10s%12d\n",s[i].num,s[i].start,s[i].over,s[i].time,s[i].count//定义输出格式

void input() //输入航班信息

void print() //输出航班信息

void save()//保存航班信息

void read()//读取航班信息

void search() //查找航班信息

void shanchu() //删除航班信息

void dingpiao()//订票信息

void tuipiao() //退票信息

void xiugai() //修改信息

void main()

{

int j

printf("================================================================================\n")

do

{

printf(" 1.输入航班信息\n\n"

" 2.浏览航班信息\n\n"

" 3.修改航班信息\n\n"

" 4.查找航班信息\n\n"

" 5.删除航班信息 \n\n"

" 6.订票信息\n\n"

" 7.退票信息 \n\n"

" 0.退出\n\n")

printf("================================================================================\n")

printf("请在0-7中选择以回车键结束:\n\n")

scanf("%d",&j)

switch(j)

{

case 1: input()//调用输入模块

break

case 2:print()//调用打印模块

break

case 3:xiugai()//调用修改模块

break

case 4:search()//调用查找模块

break

case 5:shanchu() //调用删除模块

break

case 6:dingpiao()//调用订票模块

break

case 7:tuipiao()//调用退票模块

break

case 0:

break

}

}while(j!=0)//判断结束

printf("谢谢使用,再见!\n")

}//主函数结束

void input()//打印模块程序

{

int y

printf("请依次输入航班信息(机票数位0结束输入):\n\n"

"完成输入信息请键入w以回车键结束\n\n") //打印提示信息

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

for(i=0i<Ni++)

{

printf("请输入航班号:\n")

scanf("%d",&s[i].num)//读取航班号

printf("请输入起始站:\n")

scanf("%s",s[i].start)//读取起始站

printf("请输入终点站:\n")

scanf("%s",s[i].over)//读取终点站

printf("请输入时间:\n")

scanf("%s",s[i].time)//读取时间

printf("请输入机票数(机票数为0结束输入):\n",m)

scanf("%d",&s[i].count)//读取机票数

m++

printf("第%d个信息已经输完是否继续?按任意键继续,按 0结束",m)

scanf("%d",&y)

if(y==0)

{

save()//将结构体信息存盘

print()//输出输入的航班信息

break

}

}

}

void save()//保存模块程序

{

FILE *fp,*fp1//定义文件指针

if((fp=fopen("chen.dat","wb"))==NULL)//打开文件并判断是否出错

{

printf("创建文件失败!\n\n")//打印出错提示

getchar()

return

}

if((fp1=fopen("hao.dat","wb"))==NULL)//打开文件并判断是否出错

{

printf("创建文件失败!\n\n")//打印出错提示

getchar()

return

}

for(i=0i<mi++)

if(fwrite(&s[i],sizeof(struct air),1,fp)==0)//向文件写入数据,并判断是否出错

printf("向文件输入数据失败!\n\n")

fprintf(fp1,"%d",m)

fclose(fp)//关闭文件

fclose(fp1)//关闭文件

}

void read()//从文件读取信息模块

{

FILE *fp,*fp1//定义文件指针

if((fp=fopen("chen.dat","rb"))==NULL)//打开文件,并判断是否出错

{

printf("出错,请检查文件是否存在,按任意键返回住菜单")//打印出错提示

getchar()

}

if((fp1=fopen("hao.dat","rb"))==NULL)//打开文件并判断是否出错

{

printf("创建文件失败!\n\n")//打印出错提示

getchar()

return

}

fscanf(fp1,"%d",&m)

fclose(fp1)//关闭文件

for(i=0i<mi++)

{

fread(&s[i],sizeof(struct air),1,fp)//从文件中读取信息

}

fclose(fp)//关闭文件

}

void print()//打印模块

{

char w[10]

read()//调用读取文件函数

printf("航班号 起始站 终点站时间 机票数\n")

for(i=0i<mi++)

{

printf(PRINT)//打印信息

}

printf("请按任意键回车键结束返回上层菜单以:\n")

scanf("%s",w)

}

void search()//查询模块

{

char name1[20]

char name2[20]

char ii[10]

int n,no

do

{

printf("请选择查找方式:\n\n")//打印查询方式菜单

printf("1.按航班号查找\n\n"

"2.按终点站查找\n\n"

"3.按航线查找\n\n"

"0.返回\n\n")

printf("请在0-3中选择:\n\n"

"按其他键以回车键结束返回主菜单:\n\n")

scanf("%d",&n)//读取查找方式

if(n==0)

break

switch(n)

{

case 1:

printf("请输入航班号:\n")

scanf("%d",&no)//航班号

break

case 2:

printf("请输入终点站名称:\n")

scanf("%s",name2)//读取终点站

break

case 3:

printf("请输入起始站名称:\n")

scanf("%s",name1)//读取起始站

printf("请输入终点站名称:\n")

scanf("%s",name2)//终点站

break

}

read()//调用读取函数

for(i=0i<mi++)

{

if(strcmp(s[i].over,name1)==0||strcmp(s[i].over,name2)==0)//按终点站起始站判断输出条件

{

printf("\n查找航班信息成功!\n")

printf("航班号 起始站 终点站时间 机票数\n")

printf(PRINT)//打印信息

break

}

if(s[i].num==no)//按航班号判断输出条件

{

printf("\n查找航班信息成功!\n")

printf("航班号 起始站 终点站时间 机票数\n")

printf(PRINT)//打印信息

break

}

}

no=0//将航班号赋值为0

printf("没有您需要的信息或查找完毕:\n\n"

"是否继续查找?请键入yes或no以回车键结束\n")

scanf("%s",ii)

}while(strcmp(ii,"yes")==0)//判断结束

}

void shanchu()//删除模块

{

char name1[20]

char name2[20]

char ii[10]

char f[]="2008china"//设置密码

int no,n

printf("请输入密码并以回车键结束:\n\n")

scanf("%s",f)//读取密码

if(strcmp(f,"2008china")==0)//判断密码是否正确

{

do

{

printf("请选择删除以方式回车键结束:\n\n")//打印删除方式菜单

printf("*1.按航班号删除\n\n"

"*2.按航线删除\n\n"

"*0.返回\n\n")

printf("请在0-2中选择以回车键结束:\n")

scanf("%d",&n)//读取删除方式

if(n==0)

break //跳出循环

switch(n)

{

case 1:

printf("请输入航班号:\n")

scanf("%d",&no)//读取航班号

read()//调用读取函数

break//跳出循环

case 2:

printf("请输入起始站 名称:\n")

scanf("%s",name1)//读取起始站

printf("请输入终点站名称:\n")

scanf("%s",name2)//读取终点站

read()//调用读取函数

break//跳出循环

}

for(i=0i<mi++)

{

if(s[i].num==no||strcmp(s[i].start,name1)==0&&strcmp(s[i].over,name2)==0)//判断输入信息是否存在

{

s[i]=s[m-1]

m--

}

}

printf("查找完毕或没有这个信息\n\n")

printf("是否继续删除\n")

printf("请键入yes或no以回车键结束\n")

scanf("%s",ii) //读取是否继续信息

save()//调用读取函数

if(!strcmp(ii,"yes")) //判断是否继续删除

printf("请按任意键以回车键结束返回上层菜单:\n")

break

}while(n!=1&&n!=2&&n!=3&&n!=4&&n!=0) //判断结束

}

else

printf("对不起密码错误!您不是管理员,不能使用此项功能!谢谢!再见!\n\n")

}

void dingpiao()//订票模块

{

int n

char a[10]

do

{

search()//调用查询模块

printf("请输入您要订的机票数以回车键结束:\n")

scanf("%d",&n)//读取所订机票数

if(n<0)

{

printf("请输入有效的机票数!\n")//判断机票数是否出错

break

}

if(s[i].count!=0&&s[i].count>=n)//判断是否出错

{

s[i].count=s[i].count-n

save()//调用保存函数

printf("订票成功!\n\n")

break

}

if(s[i].count<n)//判断是否出错

{

printf("请输入有效的机票数:\n")

break

}

printf("是否继续? 请输入yes或no以回车键结束:\n")//判断是否继续订票

scanf("%s",a)

}while(!strcmp(a,"yes"))//判断结束

}

void tuipiao()//退票模块

{

int n

char a[10]

do

{

search()//调用查询模块

printf("请输入您要退的机票数目:\n")

scanf("%d",&n)//输入所退票数

if(n<0) //判断票数是否有效

printf("请输入有效的机票数!\n")

s[i].count=s[i].count+n

save()//调用保存模块

printf("退票成功!\n\n")

printf("是否继续? 请键入yes或no以回车键结束:\n\n")//判断是否继续退票

scanf("%s",a)

}while(!strcmp(a,"yes"))//判断并跳出循环

getchar()

}

void xiugai() //修改模块

{

struct xiu//定义结构体

{

int no

char name1[20]

char name2[20]

char time[20]

int count

}x[1]

char j[10]

int n

printf("请输入密码并以回车键结束:\n\n")

read()//调用读取模块

do

{

printf( "请选择修改方式:\n\n"

"*1,按航班号修改:\n\n"

"*2,按航线修改: \n\n")

printf("请在1---2中修改以回车键结束:\n\n")

scanf("%d",&n)//读取修改方式

switch(n)

{

case 1:printf("请输入航班号:\n")

scanf("%d",&x[0].no)//读取航班号

break

case 2:printf("请输入起始站:\n")

scanf("%s",x[0].name1)//读取起始站

printf("请输入终点站:\n")

scanf("%s",x[0].name2)//读取终点站

break

}

for(i=0i<mi++)

{

if(strcmp(s[i].over,x[0].name1)==0&&strcmp(s[i].over,x[0].name2)==0)//判断输出条件

{

printf("航班号 起始站 终点站时间 机票数\n")

printf(PRINT)

break

}

if(s[i].num==x[0].no)//判断输出条件

{

printf("航班号 起始站 终点站时间 机票数\n")

printf(PRINT)

break

}

}

x[0].no=0 //将结构体中的号为零

printf("请输入新航班号、起始站、终点站、时间(星期几)、机票数:\n")

scanf("%d%s%s%s%d",&x[0].no,x[0].name1,x[0].name2,x[0].time,&x[0].count)//定义输入格式

s[i].num=x[0].no//替换航班号

strcpy(s[i].start,x[0].name1)//替换其始站

strcpy(s[i].over,x[0].name2)//替换终点站

strcpy(s[i].time,x[0].time)//替换时间

s[i].count=x[0].count//替换机票数

save()//调用保存模块

printf("是否继续?请键入yes或no以回车键结束:\n\n")

scanf("%s",j)

}while(strcmp(j,"yes")==0) //判断结束

}

答即可得2分,回答被采纳则获得悬赏分以及奖励20分


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7915050.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-11
下一篇 2023-04-11

发表评论

登录后才能评论

评论列表(0条)

保存