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

C语言实现小游戏——模拟微信小游戏《最强飞刀手》
微信小游戏
曾经玩过的微信小游戏,想着用C语言实现,只可惜,下图是我的上限。
在这里插入图片描述
这个下游戏界面简陋,把旋转的西瓜做成了平的接盘;实现的功能有:接盘的移动、飞刀的移动与发射、飞刀与接盘的结合、游戏计分、游戏闯关(每过一关,难度上升——通过加快接盘的移动速度以及增加飞刀的数量)等
![Alt]

附上代码:

测试程序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
  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
微信小程序是一种基于微信平台的应用程序,它的开发语言主要是使用微信开发者工具进行开发的,而微信开发者工具主要支持的是基于Web技术的前端开发语言,例如HTML、CSS和JavaScript等。 微信小程序本身并不直接支持C语言代码的运行和执行,因为C语言是一种编译型的语言,需要通过编译器进行编译后才能执行。而微信小程序的开发框架并未提供与C语言的交互接口。 不过,如果您在微信小程序中需要使用C语言的功能,可以考虑使用小程序的Webview组件,在其中加载已经编译好的C语言代码的网页或者WebAssembly(WASM)文件。通过这种方式,可以间接在微信小程序中运行C语言代码。 具体步骤可以分为以下几个: 1. 首先,将C语言代码编译成可运行的格式,例如编译为JS或者WASM文件。 2. 在微信小程序的页面中引入Webview组件,并指定加载C语言代码的网页或者WASM文件。 3. 在网页或者WASM文件中通过JS与微信小程序进行交互,例如通过JS调用C语言代码的函数,并将结果返回给小程序。 需要注意的是,这种方式并非直接在微信小程序中运行C语言代码,而是通过Webview组件创建的浏览器内核加载C语言代码。所以在性能和安全性方面需要进行适当的考虑和测试。 总之,微信小程序本身并不直接兼容C语言代码,但可以通过在小程序中加载已经编译好的C语言代码的网页或者WASM文件来间接使用C语言功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值