C语言实现小游戏——模拟微信小游戏《最强飞刀手》

曾经玩过的微信小游戏,想着用C语言实现,只可惜,下图是我的上限。

这个下游戏界面简陋,把旋转的西瓜做成了平的接盘;实现的功能有:接盘的移动、飞刀的移动与发射、飞刀与接盘的结合、游戏计分、游戏闯关(每过一关,难度上升——通过加快接盘的移动速度以及增加飞刀的数量)等

附上代码:

测试程序main.c:

#include "game.h"
int main(int argc,char **argv)
{system("mode con cols=120 lines=50");menu();choose();return 0;
}

函数定义game.c:

#include "game.h"
#define RIGHT 1
#define LEFT 2
int state;
int score,add_score,sleeptime,level,knife_num,left_num;
content *c_head,*c_tail,*c_p;
knife *k_head,*k_tail,*k_p;
/*  光标位置   */
void gotoxy(int x,int y)  //x坐标,2为一个汉字宽度;y坐标,1为一个汉字高度
{COORD c;c.X=x;c.Y=y;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),c);
}/*  字体颜色   */
int color(int c)
{SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), c);        //更改文字颜色return 0;
}/*  界面首页   */
void menu()
{gotoxy(50,10);color(10);printf(" 最    强    飞    刀 \n");gotoxy(42,18);color(3);printf("1、开始游戏                2、退出游戏\n");
}/*  游戏开始/退出   */
void choose()
{int mode;gotoxy(52,24);color(6);printf("请输入1或者2: ");color(2);scanf("%d",&mode);switch(mode){case 1:system("cls");state=RIGHT;score=0;add_score=5;sleeptime=160;level=1;knife_num=5;left_num=knife_num;game_begin();break;case 2:system("cls");exit(0);break;default:system("cls");menu();gotoxy(50,26);color(4);printf("输入有误,请重新输入! ");choose(); }
}/*  游戏开始   */
void game_begin()
{print_boundary();print_background();print_word();content_init();knife_init();while(1){Sleep(sleeptime);knife_move(); print_content();Sleep(20);knife_init();content_direction();content_move();print_content();print_word();if(left_num==0){Sleep(200);level_change();}}
}/*  接盘初始化   */
void content_init()
{int i,x=10,y=4;c_head=(content *)malloc(sizeof(content));c_head->next=NULL;c_tail=c_head;for(i=0;i<14;i++){c_p=(content *)malloc(sizeof(content));c_p->next=NULL;c_tail->next=c_p;c_tail=c_p;}c_p=c_head; while(c_p){c_p->x=x;c_p->y=4;color(4);gotoxy(c_p->x,c_p->y);printf("■");c_p->flag=0;x+=2;c_p=c_p->next;}
}/*  飞刀初始化  */
void knife_init()
{int i,x=38,y=30;k_head=(knife *)malloc(sizeof(knife));k_head->next=NULL;k_tail=k_head;for(i=0;i<4;i++){k_p=(knife *)malloc(sizeof(knife));k_p->next=NULL;k_tail->next=k_p;k_tail=k_p;}k_p=k_head; while(k_p){k_p->x=x;k_p->y=y;color(5);gotoxy(k_p->x,k_p->y);printf("■");y-=1 ;k_p=k_p->next;}gotoxy(k_tail->x,k_tail->y);printf("▲");
}/*  游戏边界   */
void print_boundary()
{int x,y;color(10);for(x=8;x<70;x+=2){gotoxy(x,2);printf("■");gotoxy(x,40);printf("■");}for(y=3;y<40;y+=1){gotoxy(8,y);printf("■");gotoxy(68,y);printf("■");}
}/*  游戏背景+飞刀底座   */
void print_background()
{int x,y;color(0);for(x=10;x<68;x+=2){for(y=3;y<40;y+=1){gotoxy(x,y);printf("■");}}color(4);for(y=31,x=34;x<44;x+=2){gotoxy(x,y);printf("■");    }for(y=32,x=32;x<46;x+=2){gotoxy(x,y);printf("■"); }
}/*  打印接盘+已发射飞刀  */
void print_content()
{   int x,y;c_p=c_head;    while(c_p){color(4);gotoxy(c_p->x,c_p->y);printf("■");if(c_p->flag){color(5);gotoxy(c_p->x,c_p->y+1);printf("▲");gotoxy(c_p->x,c_p->y+2);printf("■");gotoxy(c_p->x,c_p->y+3);printf("■");gotoxy(c_p->x,c_p->y+4);printf("■");gotoxy(c_p->x,c_p->y+5);printf("■");}else{for(y=5;y<10;y++){color(0);gotoxy(c_p->x,y);printf("■");}}c_p=c_p->next;}for(x=10;x<c_head->x;x+=2){         for(y=5;y<10;y++){color(0);gotoxy(x,y);printf("■");}}for(x=c_tail->x+2;x<68;x+=2){            for(y=5;y<10;y++){color(0);gotoxy(x,y);printf("■");}}
}/*   文字说明   */
void print_word()
{color(10);gotoxy(80,6);printf("第 %d 关",level);color(10);gotoxy(80,8);printf("本关剩余 %d 把刀",left_num);color(10);gotoxy(80,16);printf("你的得分是: %d 分",score);gotoxy(80,18);printf("下一个飞刀分值: %d 分",add_score);color(12);gotoxy(80,22);printf("用↑发射飞刀");gotoxy(80,24);printf("space : 暂停游戏");gotoxy(80,26);printf("ESC : 结束游戏");
}/*   接盘方向控制   */
void content_direction()
{if((c_head->x==10) && (state==LEFT))state=RIGHT;if(c_tail->x==66 && state==RIGHT)state=LEFT;if(GetAsyncKeyState(VK_ESCAPE)){system("cls");game_end();}if(GetAsyncKeyState(VK_SPACE)) {while(GetAsyncKeyState(VK_SPACE));while(1){if(GetAsyncKeyState(VK_SPACE)){while(GetAsyncKeyState(VK_SPACE));break;}}}}/*   接盘运动函数   */
void content_move()
{switch(state){case RIGHT:move_right();break;case LEFT:move_left();break;}
}/*   向左运动   */
void move_right()
{color(0);gotoxy(c_head->x,c_head->y);printf("■");c_p=c_head;while(c_p){c_p->x+=2;c_p=c_p->next;}}/*   向右运动   */
void move_left()
{color(0);gotoxy(c_tail->x,c_tail->y);printf("■");c_p=c_head;while(c_p){c_p->x-=2;c_p=c_p->next;}
}/*   发射飞刀   */
void knife_move()
{   c_p=c_head;if(GetAsyncKeyState(VK_UP))     {while(c_p){if(c_p->x==38){if(c_p->flag==0){knife_up(5);c_p->flag=1;score+=add_score;if(left_num>0)left_num--;}else{knife_up(10);Sleep(500);system("cls");game_end();}     }c_p=c_p->next;     }}
}/*   飞刀向上移动   */
int knife_up(int y_min)
{while(k_tail->y > y_min){k_p=k_head;color(0);gotoxy(k_p->x,k_p->y);printf("■");while(k_p){k_p->y-=1;color(5);gotoxy(k_p->x,k_p->y);printf("■");k_p=k_p->next;}gotoxy(k_tail->x,k_tail->y);printf("▲");}return 0;
}/*   关卡切换  */
void level_change()
{level+=1;if(knife_num<12)knife_num+=1;else{system("cls");game_win();  }left_num=knife_num;if(sleeptime>60)sleeptime-=20;system("cls");color(4);gotoxy(54,14);printf("  第 %d 关\n",level);Sleep(1000);system("cls");game_begin();
}/*   游戏结束   */
void game_end()
{int i;color(4);gotoxy(54,10);printf("游  戏  结  束\n");gotoxy(54,14);printf("  第 %d 关\n",level);gotoxy(54,16);printf(" 总分: %d 分\n",score);gotoxy(42,22);color(3);printf("1、返回首页               2、退出游戏\n");gotoxy(52,26);color(6);printf("请输入1或者2:");color(2);scanf("%d",&i);switch(i){case 1:system("cls");menu();   choose();break;case 2:system("cls");exit(0);break;default:system("cls");gotoxy(50,28);color(4);printf("输入有误, 请重新输入! ");game_end(); }
}/*   游戏胜利   */
void game_win()
{int i;color(2);gotoxy(52,10);printf("恭 喜 你 通 过 全 关 !\n");gotoxy(54,16);printf(" 总分: %d 分\n",score);gotoxy(42,22);color(3);printf("1、返回首页               2、退出游戏\n");gotoxy(52,26);color(6);printf("请输入1或者2:");color(2);scanf("%d",&i);switch(i){case 1:system("cls");menu(); choose();break;case 2:system("cls");exit(0);break;default:system("cls");gotoxy(50,28);color(4);printf("输入有误, 请重新输入! ");game_win(); }
}

头文件game.h:

#ifndef _GAME_
#define _GAME_#include <stdio.h>
#include <time.h>
#include <windows.h>
#include <stdlib.h>
#include <conio.h>typedef struct content
{int x;int y;int flag;struct content *next;
}content;typedef struct knife
{int x;int y;struct knife *next;
}knife;void menu();
void choose();
void game_begin();
void game_end();
void game_win();
void content_init();
void knife_init();
void print_boundary();
void print_background();
void print_content();
void print_word();
void content_direction();
void content_move();
void move_right();
void move_left();
void knife_move();
int knife_up(int y_min);
void level_change();#endif

C语言实现小游戏——模拟微信小游戏《最强飞刀手》相关推荐

  1. 微信小程序和微信小游戏的区别体现在哪?

    微信小程序和微信小游戏有什么区别?随着<羊了个羊>持续大火,很多人把开发目光投向了微信小游戏.虽然说微信小游戏是微信小程序的一种类型,但两者不仅仅是服务类目不同,所提供的部分小程序能力也不 ...

  2. 微信小游戏和微信小程序的区别与共同

    微信小游戏 小游戏的运行环境在 iOS 上是 JavaScriptCore,在 Android 上是 V8,都是没有 BOM 和 DOM 的运行环境,没有全局的 document 和 window 对 ...

  3. 解决QQ小游戏、微信小游戏 getLaunchOptionsSync()获取的数据为旧数据

    解决QQ小游戏.微信小游戏 getLaunchOptionsSync()获取旧数据的问题 维尼与你同在 @13805064305 原因 一般这个问题不是首次登录出现的,而是第二次从别的游戏跳过来,后台 ...

  4. 微信小程序、微信小游戏作品汇总合集,各种好玩的小程序

    微信小程序.微信小游戏作品汇总合集,各种好玩的小程序 小程序: 微信小程序:易阅小程序作品展示 微信小程序:幸福磁县小程序作品展示 微信小程序:小说精品榜小程序作品展示 微信小程序:武汉智慧交警小程序 ...

  5. html微信小游戏,白鹭HTML5游戏转微信小游戏问题集锦,你关心的都在这里

    原标题:白鹭HTML5游戏转微信小游戏问题集锦,你关心的都在这里 首先,再次强调一些微信小游戏的基础技术限制: * 不允许操作 DOM.BOM.如果必须改成小游戏相应的 API 调用方式,目前引擎会自 ...

  6. android源码大全 IOS游戏源代码打包下载 小游戏|视频教程 微信小程序源码带后台全套|公众号平台

    不断更新中,下面是2017-12-22更新部分 IOS_源码及视频一小部分: 开发环境:Xcode 基于cocos2d的tweejump跳跃游戏ios经典游戏源码.rar  https://pan.b ...

  7. QQ小游戏、微信小游戏获取ip地址,并通过ip得到所在地区

    QQ小游戏.微信小游戏获取用户的ip地址,并通过ip得到所在地区 问题解决了就点赞,还有疑问就留言或是私我,臭弟弟 记得要把合法域名加进去,或者编译的时候不校验合法域名等,不然会报错 如果是后端屏蔽, ...

  8. 微信小程序和微信小游戏的区别

    本人小程序(小游戏)开发新手,看了几天文档,才大概搞明白微信小程序和微信小游戏的区别. 首先大家口中所说的"小程序"这个概念有两个意思: 一种是"小程序平台下的全部类型的 ...

  9. 游戏助手微信小程序源码王者荣耀战力查询,游戏扫码登录器等支持流量主

    这是一款游戏助手小程序源码,UI方面的话还是挺简单,小编个人看着挺舒服的 小程序内支持多种热门游戏扫码登录,也就是说是一个游戏登录器 比如英雄联盟,王者荣耀,和平精英等等热门游戏都支持 另外还有王者战 ...

最新文章

  1. 深度 | 解决真实世界问题:如何在不平衡类上使用机器学习?
  2. ReadWriteLock
  3. delphi valuelisteditor控件的使用
  4. 云计算重头戏:可信计算技术
  5. java之spring mvc之文件上传
  6. C# 内存的理解 通俗说
  7. Spring面试题(第一期)
  8. html 手机复制到剪贴板,移动端和pc端的复制到剪贴板功能
  9. 文件被后台程序占用无法删除_群晖NAS教程第十五节:查询群晖NAS硬盘空间占用情况,解决删除文件空间不增加问题...
  10. BZOJ 1565: [NOI2009]植物大战僵尸
  11. CSS动态样式---基础-控制是否添加CSS类
  12. 不同操作系统的user data存放目录
  13. Datawhale组队学习:数据竞赛(房价预测)课程任务
  14. AODV按需路由协议
  15. 设计模式之 Factory Mode 工厂模式:Swift 实现
  16. 计算理论导论第1章答案 Michael Sipser
  17. 如何给Word中的图片添加题注
  18. 解决VS报表.rdl 显示乱码“小方块”问题
  19. python库吐血整理
  20. 从一个微服务应用的成功落地,谈企业需要什么样的微服务治理

热门文章

  1. bios sgx需要开启吗_华硕主板BIOS解读:新手装机必备篇(必须收藏)
  2. wpf title link 新窗口_新型纳米球探针:开启认知微观世界的新窗口
  3. EasyRecovery15非常好用的电脑数据恢复软件
  4. [知识点]ss,dsds/dsda,tsts,qsqs
  5. Tensorflow图像分类代码理解
  6. matlab顺序消元法例题,求助,关于用matlab解列主元消去法的题
  7. bert中的sep_最强NLP模型BERT可视化学习
  8. 如何从songtaste下载歌曲
  9. VC++程序设计与应用--动态链接库
  10. 将Excel表格导入mysql数据表_将excel表导入数据库的方法步骤