【c语言小项目】基于easyX实现的《是男人就下一百层》小游戏

news2024/12/23 6:39:35

创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡>𖥦<)!!
主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步!
🔥c语言系列专栏:c语言之路重点知识整合 🔥
给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ

EeayX是针对 C/C++ 的简单图形库插件,本项目基于easyX游戏框架下实现是男人就下一百层游戏。

更多【c语言】小项目:

【c语言小项目】基于easyX的俄罗斯方块

【c语言小项目】基于easyX的贪吃蛇游戏


是男人就下一百层小游戏 目录

  • 游戏介绍
    • 游戏官网
  • 运行示例:
  • 全部代码:
  • 图片文件
  • easyX游戏框架

游戏介绍

NS-SHAFT是草薙昭彦开发的一款休闲过关小游戏。

此游戏于2002年开始在中国网络流行,被普遍命名为“是男人就下100层”,从名字上就能体现出此游戏的难度。

游戏玩法

使用方向键左右控制小人,防止被托上去挤死、掉下去摔死

游戏官网

游戏原版官网:NS-SHAFT 1.3J

运行示例:

在这里插入图片描述

全部代码:

(直接复制并配置图片文件路径就可以执行)

#include <easyx.h>
#include <time.h>
#include <conio.h>
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#include<string>
#include<graphics.h>
#include <mmsystem.h> 
#include <windows.h>
//音乐
#include <graphics.h>
#include <mmsystem.h> // 包含MCI API函数的头文件
/*游戏界面绘制*/
void gamePaint();
/*游戏初始化绘制*/
void gameInit();
/*游戏定时处理*/
void gameInterval();
/*游戏键盘按下*/
void gameKeypress(int key);
/*游戏鼠标按下*/
void gameMouseDown(int mouseX,int mouseY);
/*游戏鼠标抬起*/
void gameMouseUp(int mouseX,int mouseY);
/*游戏鼠标移动*/
void gameMousemove(int mouseX,int mouseY);

/*透明图绘制*/
void drawImage(IMAGE* picture, int  picture_x, int picture_y); //x为要载入图片的X坐标,y为Y坐标
/*矩形碰撞检测*/
int testHit(int x1,int y1,int w1,int h1,int x2,int y2,int w2,int h2 );

/*设置100即每隔100毫秒刷新以下界面绘图。*/
int interval = 100;//TODO: 1 设置定时器时间间隔(单位毫秒)
// TODO: 1 设置窗口: 宽度 高度
int screenWidth = 632;
int screenHeight=430;
int stop = 0;
//-----------------------------------//
int times = 0; 
int score = 0;
/*初始化游戏 */
void initgame()
{
	srand((unsigned)time(NULL));//随机数初始化
	setbkcolor(NULL);//背景色
	setbkmode(TRANSPARENT);// 设置背景混合模式: TRANSPARENT为透明
	gameInit();
}
/*
	界面绘图演示案例
*/
void paintDemo()
{
	/* 颜色设置:
	//设置线的颜色     Blue Green Red  十六进制表示三原色
	setlinecolor(0x0000ff);//红色的 线
	//-设置填充的颜色
	setfillcolor(0x00ff00);//绿色的 填充
	//-设置字体的颜色
	settextcolor(0xff0000);//蓝色的 字体颜色
	*/


	/*  画直线的案例

		setlinestyle(PS_DASH, 粗细); //PS_DASH 虚线  PS_SOLID 实现 PS_DOT 点线...
		line(点1x坐标 ,点1y坐标,点2x坐标 ,点2y坐标); //两点确定一条直线
		例如:
	
	setlinestyle(PS_DASH, 3);
	line(50 ,50,300 ,200); 
	*/


	/*
	  绘制矩形
	  1.空心矩形
	  rectangle( 顶点x,顶点y,右下点x,右下点的y);
	  按宽度 和 高度计算为
	  rectangle( 顶点x,顶点y,顶点x+宽度,顶点y+高度);
	  rectangle(x,y,x+width,y+height);
	  2.实心矩形(无边框)
	  solidrectangle( 顶点x,顶点y,顶点x+宽度,顶点y+高度); 
	  3.实心矩形(有边框)
	  fillrectangle( 顶点x,顶点y,顶点x+宽度,顶点y+高度); 
	  例如: 绘制一个宽50 高50 的正方形
	
		rectangle( 100,100,100+50,100+50);
		fillrectangle( 100,100,100+50,100+50);
	*/
	

	/*
	  绘制圆形
	  1、空心圆
	  circle( 圆心x坐标,圆心y坐标,半径);
	  2、实心圆(无边框)
	  solidcircle( 圆心x坐标,圆心y坐标,半径);
	  3、实心圆(有边框)
	  fillcircle( 圆心x坐标,圆心y坐标,半径);
	  例如: 
	  
		circle( 75,75,50);
		fillcircle( 75,75,50);
	*/


	/*
	 绘制文字
	 1、设置字体样式
	 settextstyle(字高, 0, _T("字体名称"));
	 2、设置文字位置与内容
	 outtextxy(x,y,L"文字内容");
	 例如:
	 settextstyle(46, 0, _T("黑体"));
	 outtextxy(300,400,L"helloworld你好世界");
	 */

	settextstyle(20, 0, _T("宋体"));
	outtextxy(40, 390, L"天喜Studio");
	/*模板化 动态文字
	TCHAR str[100];
	_stprintf (str, L"%s的数学成绩是%d", L"小明",61);
	outtextxy(300,400,str );
	*/


	/*贴图
	1、声明一个存放图片变量(为了节省图片变量内存空间,通常把其放到全局变量位置)
	IMAGE img1 ; 
	2、加载硬盘的图片到图片变量的内存地址
	loadimage(&img1, L".\\图片路径\\图片文件名" ); //.代表项目硬盘存储的位置
	3、把内存中的图片显示到界面上。
	putimage(x,y,&img1); 
	*/


	/*例如:贴一张图 
	//loadimage(&img, L".\\images\\jpg\\1\\image0.jpg") ; //图片不透明
	IMAGE img1 ;
	loadimage(&img1, L".\\images\\1\\image0.png") ; 
	putimage(10,10,&img1);*/


	/*例如:再贴一张图
	IMAGE img2;
	loadimage(&img2, L".\\images\\2\\image8.png") ; 
	putimage(10,200,&img2); */


	/*例如:连续贴图,要求相同尺寸的图
	IMAGE img3;
	TCHAR imgPath[100];
	int i;
	for (i = 0; i <=23; i++)
	{
		_stprintf (imgPath, L".\\images\\%d\\image%d.png", 3,i);
		loadimage(&img3,imgPath ) ; 
		putimage(100*i,300,&img3); 
	}*/
	 
}

/*绘制显示游戏界面*/
void paint()
{
	BeginBatchDraw();//打开双缓冲
	cleardevice();// 清屏
	
	gamePaint();
	paintDemo();
	//-----------------------------//
	EndBatchDraw();//关闭双缓冲
}



/*游戏运行*/
void run()
{
	
	ExMessage mouse ;
	//ExMessage key;
	while (1)	// 游戏主循环  可借助break 结束循环
	{
		
		/*if (peekmessage(&mouse, -1, true))
		{
			mouse=getmessage();
			if (mouse.message == WM_LBUTTONDOWN )
			{
				gameMouseDown(mouse.x,mouse.y);
			}
			else if (mouse.message == WM_LBUTTONUP )
			{
				gameMouseUp(mouse.x,mouse.y);
			}

			else if(mouse.message == WM_MOUSEMOVE)
			{
				gameMousemove(mouse.x,mouse.y);
			}
			
			
			
			paint();
		}*/
		if (peekmessage(&mouse, -1, true))
		{
			switch (mouse.message)
			{
			case WM_KEYDOWN:
				gameKeypress(mouse.vkcode);
				break;
			}
			paint();
			continue;
		}
		
		/*if (_kbhit())
		{
			int k=_getch();
			 
			gameKeypress(k);

			 paint();
		}*/
		





		//------时间处理 勿动-----------//
		Sleep(1);
		times++;
		if(times%(interval/10)!=0){
			continue;
		}
		times=0;
		if(stop)
		{
			printf("Gmae Over!\n\n你的分数为:%d\n", score);
			break;
		}
		gameInterval();
		 
		//-------------------------------//
		paint();// 刷新显示游戏界面
	}
}



/*绘制透明背景图*/
 void drawImage(IMAGE* picture, int  picture_x, int picture_y) //x为载入图片的X坐标,y为Y坐标
{

	// 变量初始化
	DWORD *dst = GetImageBuffer();    // GetImageBuffer()函数,用于获取绘图设备的显存指针,EASYX自带
	DWORD *draw = GetImageBuffer(); 
	DWORD *src = GetImageBuffer(picture); //获取picture的显存指针
	int picture_width = picture->getwidth(); //获取picture的宽度,EASYX自带
	int picture_height = picture->getheight(); //获取picture的高度,EASYX自带
	int graphWidth = getwidth();       //获取绘图区的宽度,EASYX自带
	int graphHeight = getheight();     //获取绘图区的高度,EASYX自带
	int dstX = 0;    //在显存里像素的角标

	// 实现透明贴图 公式: Cp=αp*FP+(1-αp)*BP , 贝叶斯定理来进行点颜色的概率计算
	for (int iy = 0; iy < picture_height; iy++)
	{
		for (int ix = 0; ix < picture_width; ix++)
		{
			int srcX = ix + iy * picture_width; //在显存里像素的角标
			int sa = ((src[srcX] & 0xff000000) >> 24); //0xAArrggbb;AA是透明度
			int sr = ((src[srcX] & 0xff0000) >> 16); //获取RGB里的R
			int sg = ((src[srcX] & 0xff00) >> 8);   //G
			int sb = src[srcX] & 0xff;              //B
			if (ix >= 0 && ix <= graphWidth && iy >= 0 && iy <= graphHeight && dstX <= graphWidth * graphHeight)
			{
				dstX = (ix + picture_x )+ (iy +   picture_y ) * graphWidth; //在显存里像素的角标
				int dr = ((dst[dstX] & 0xff0000) >> 16);
				int dg = ((dst[dstX] & 0xff00) >> 8);
				int db = dst[dstX] & 0xff;
				draw[dstX] = ((sr * sa / 255 + dr * (255 - sa) / 255) << 16)  //公式: Cp=αp*FP+(1-αp)*BP  ; αp=sa/255 , FP=sr , BP=dr
					| ((sg * sa / 255 + dg * (255 - sa) / 255) << 8)         //αp=sa/255 , FP=sg , BP=dg
					| (sb * sa / 255 + db * (255 - sa) / 255);              //αp=sa/255 , FP=sb , BP=db
			}
		}
	}
}

int testHit(int x1,int y1,int w1,int h1,int x2,int y2,int w2,int h2 )
{
 return !(x1 + w1 < x2||
		 y1 + h1 < y2 ||
		 x2 + w2 <x1 ||
		 y2 + h2<y1 );
}
// 主函数,开启游戏
int main  ()
{
	initgraph(screenWidth, screenHeight);		
	initgame();					// 初始化游戏
	paint();// 刷新显示游戏界面
	 
	flushmessage();		// 清空鼠标缓冲区
	while (_kbhit()) _getch();	// 清空键盘缓冲区
	run();						// 开始游戏
	closegraph();//关闭图形环

	//LPCWSTR music_path = L".\\music\\BGM.mp3"; // 设置音乐文件的路径
	//char music_path_mb[256]; // 定义存储多字节格式字符串的缓存区
	//WideCharToMultiByte(CP_ACP, 0, music_path, -1, music_path_mb, 256, NULL, NULL); // 将Unicode字符串转换为ANSI格式字符串
	//PlaySound(music_path, NULL, SND_FILENAME | SND_ASYNC); // 播放音乐文件

	return 0;
}
 


//TODO: 2 全局变量声明位置 
int boardXs[100];//每个板子的x坐标

int boardY = 300;//首个板子距离顶端的距离

int manX;//人的x坐标
int manY;//人的y坐标

//TODO: 3 游戏初始化位置  
 void gameInit()
{
	 //初始化板子
	int i;
	for( i=0 ;i<100  ;i++ )
	{
		boardXs[i]=rand()%290+40;
	}
	//初始化人
	manX=boardXs[0]+30;// 人初始化要站在第0个板子上
	manY=boardY-30;
	
}
 //TODO: 4 绘图处理位置  
void gamePaint()
{
  

	
	//------------显示背景-------------------// 
	IMAGE imgBg ;
	loadimage(&imgBg, L".\\images\\bg.png") ; 
	drawImage( &imgBg,0,0);
	//------------显示人-------------------// 
	IMAGE imgMan;
	loadimage(&imgMan, L".\\images\\man.PNG");
	putimage(manX, manY, &imgMan);

	//------------显示板子-------------------// 
	IMAGE imgBoard;
	loadimage(&imgBoard, L".\\images\\board.PNG");
	int i;
	for (i = 0; i < 100; i++)
	{
		putimage(boardXs[i], boardY + i * 50, &imgBoard);
	}
}
 //TODO: 5 定时处理位置
void gameInterval()
{
	 boardY-=5;//板子上升

	int manStandOn = 0;//假设人每站在任何的板子上
	int i;
	for(i=0;i<100;i++)
	{
		if( testHit(manX,manY,32,30,boardXs[i],boardY+i*50,95,15 ))
		{
			manStandOn = 1;
		}
	}
		 

	if (manStandOn)
	{
		manY-=5;
		score++;
	}
	else
	{
		manY+=10;
	}

	if( manY< 70 || manY>420)//< 70代表顶端出界 >420代表底边出界
	{
		stop=1;
	}
}
//TODO: 6 处理键盘控制位置
void gameKeypress(int key)
{
	switch (key)
	{
	case 'A':
	case 'a':    // 左
		if (manX > 40)
		{
			manX -= 10;
		}
		else
		{
			manX = 40;
		}
		break;	
	case 'S':
	case 's':   // 下
				
		break;	
	case 'D':
	case 'd':   // 右
		if (manX < 390)
		{
			manX += 10;
		}
		else
		{
			manX = 390;
		}

		break;	
	case 'W':  // 上
	case 'w':  
				
		break;	

	case 72: //上
				 
		break;
	case 80://下
				  
		break;

	//case 75 ://左
	//	if (manX>40)
	//	{
	//		manX-=10; 
	//	}
	//	else
	//	{
	//		manX=40;
	//	}
	//			
	//	break;

	case VK_LEFT://左
		if (manX > 40)
		{
			manX -= 10;
		}
		else
		{
			manX = 40;
		}

		break;

	//case 77://右
	//		if (manX<390)
	//	{
	//		manX+=10; 
	//	}
	//	else
	//	{
	//		manX=390;
	//	}
	//			
	//	break;

	case VK_RIGHT://右
		if (manX < 390)
		{
			manX += 10;
		}
		else
		{
			manX = 390;
		}

		break;

	default://任意键
		break;
	}
	
	
}

//TODO: 7 处理鼠标控制位置
void gameMouseDown(int mouseX,int mouseY)
{
	 
}
void gameMouseUp(int mouseX,int mouseY)
{
	 
}
void gameMousemove (int mouseX,int mouseY)
{
	 
}

图片文件

尺寸大小可自己修改

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

easyX游戏框架

#define _CRT_SECURE_NO_WARNINGS 1
#include <easyx.h>
#include <time.h>
#include <conio.h>
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#include<string>
#include<graphics.h>
 
/*游戏界面绘制*/
void gamePaint();
/*游戏初始化绘制*/
void gameInit();
/*游戏定时处理*/
void gameInterval();
/*游戏键盘按下*/
void gameKeypress(int key);
/*游戏鼠标按下*/
void gameMouseDown(int mouseX,int mouseY);
/*游戏鼠标右键按下*/
void gameMouseRightDown(int mouseX,int mouseY);
/*游戏鼠标抬起*/
void gameMouseUp(int mouseX,int mouseY);
/*游戏鼠标移动*/
void gameMousemove(int mouseX,int mouseY);
 
/*
含透明的图的绘制
x为要载入图片的X坐标,y为Y坐标
*/
void drawImage(int  picture_x, int picture_y,IMAGE* picture);  
/*调整图片透明度
  角度转弧度:PI/180*角度
  弧度转角度:180/PI*弧度
*/
void drawImageAlpha(int x0, int y0, IMAGE* img, double f);
/*两个矩形碰撞检测
即两个矩形是否相交。
 x1, y1, w1, h1是第一个矩形的xy宽高的四个参数
 x2, y2, w2, h2是第二个矩形的xy宽高的四个参数
 返回0代表不相交 返回1代表相交
*/
int testHit(int x1,int y1,int w1,int h1,int x2,int y2,int w2,int h2 );
 
/*设置100即每隔100毫秒刷新以下界面绘图。*/
int interval = 100;//TODO: 1 设置定时器时间间隔(单位毫秒)
// TODO: 1 设置窗口: 宽度 高度
int screenWidth = 800;
int screenHeight=600;
int stop = 0;//是否停止游戏
//-----------------------------------//
int times = 0; 
/*初始化游戏 */
void initgame()
{
	srand((unsigned)time(NULL));//随机数初始化
	setbkcolor(NULL);//背景色
	setbkmode(TRANSPARENT);// 设置背景混合模式: TRANSPARENT为透明
	gameInit();
}
/*
	-----天喜Studio-----
*/
 
 
/*绘制显示游戏界面*/
void paint()
{
	BeginBatchDraw();//打开双缓冲
	cleardevice();// 清屏
	 
	gamePaint();
	//-----------------------------//
	EndBatchDraw();//关闭双缓冲
}
 
 
 
/*游戏运行*/
void run()
{
	ExMessage msg ;
	//ExMessage key;
	while (1)	// 游戏主循环  可借助break 结束循环
	{
		if (peekmessage(&msg,-1,true))
		{
			switch (msg.message)
			{
			case WM_MOUSEMOVE://鼠标移动
				gameMousemove(msg.x, msg.y);
				break;
			case WM_LBUTTONDOWN://左键按下
				gameMouseDown(msg.x, msg.y);
				break;
			case WM_LBUTTONUP://左键抬起
				gameMouseUp(msg.x, msg.y);
				break;
			case WM_LBUTTONDBLCLK://左键双击
				 
				break;
			case WM_RBUTTONDOWN://右键按下
				 
				break;
			case WM_RBUTTONUP://右键抬起
				gameMouseRightDown(msg.x, msg.y);
				break;
			case WM_RBUTTONDBLCLK://右键双击
				 
				break;
			case WM_KEYDOWN:
				gameKeypress(msg.vkcode);
				break;
			}
			paint();
			continue;
		}
		
		 
		//------时间处理 勿动-----------//
		Sleep(1);
		times++;
		if(times%(interval/10)!=0){
			continue;
		}
		times=0;
		if(stop)
		{
			break;
		}
		gameInterval();
		 
		//-------------------------------//
		paint();// 刷新显示游戏界面
	}
}
 
 
 
/*绘制透明背景图*/
 void drawImage(int  picture_x, int picture_y,IMAGE* picture  ) //x为载入图片的X坐标,y为Y坐标
{
 
	// 变量初始化
	DWORD *dst = GetImageBuffer();    // GetImageBuffer()函数,用于获取绘图设备的显存指针,EASYX自带
	DWORD *draw = GetImageBuffer(); 
	DWORD *src = GetImageBuffer(picture); //获取picture的显存指针
	int picture_width = picture->getwidth(); //获取picture的宽度,EASYX自带
	int picture_height = picture->getheight(); //获取picture的高度,EASYX自带
	int graphWidth = getwidth();       //获取绘图区的宽度,EASYX自带
	int graphHeight = getheight();     //获取绘图区的高度,EASYX自带
	int dstX = 0;    //在显存里像素的角标
 
	// 实现透明贴图 公式: Cp=αp*FP+(1-αp)*BP , 贝叶斯定理来进行点颜色的概率计算
	for (int iy = 0; iy < picture_height; iy++)
	{
		for (int ix = 0; ix < picture_width; ix++)
		{
			int srcX = ix + iy * picture_width; //在显存里像素的角标
			int sa = ((src[srcX] & 0xff000000) >> 24); //0xAArrggbb;AA是透明度
			int sr = ((src[srcX] & 0xff0000) >> 16); //获取RGB里的R
			int sg = ((src[srcX] & 0xff00) >> 8);   //G
			int sb = src[srcX] & 0xff;              //B
			if (ix >= 0 && ix <= graphWidth && iy >= 0 && iy <= graphHeight && dstX <= graphWidth * graphHeight)
			{
				dstX = (ix + picture_x )+ (iy +   picture_y ) * graphWidth; //在显存里像素的角标
				if (dstX<0) continue;
				int dr = ((dst[dstX] & 0xff0000) >> 16);
				int dg = ((dst[dstX] & 0xff00) >> 8);
				int db = dst[dstX] & 0xff;
				draw[dstX] = ((sr * sa / 255 + dr * (255 - sa) / 255) << 16)  //公式: Cp=αp*FP+(1-αp)*BP  ; αp=sa/255 , FP=sr , BP=dr
					| ((sg * sa / 255 + dg * (255 - sa) / 255) << 8)         //αp=sa/255 , FP=sg , BP=dg
					| (sb * sa / 255 + db * (255 - sa) / 255);              //αp=sa/255 , FP=sb , BP=db
			}
		}
	}
}
/*调整图片透明度*/
void drawImageAlpha(int x0, int y0, IMAGE* img, double f)
{
	//获得图片尺寸
	int qwidth, qheight;
	qwidth = img->getwidth();
	qheight = img->getheight();
 
 
	//P图为背景图,RS为目标图片
	static IMAGE RS(qwidth, qheight);
	static IMAGE P(qwidth, qheight);
 
 
	//背景图的绘制
	getimage(&P, x0, y0, qwidth, qheight);
 
 
	//获取指针,作为透明度计算
	DWORD* M = GetImageBuffer(&P);
	DWORD* N = GetImageBuffer(img);
	DWORD* R = GetImageBuffer(&RS);
 
 
	// 开启批量绘图模式,解决闪烁问题
	BeginBatchDraw();
 
 
	//计算与赋值
	int i, j;
	for (i = 0; i < qheight; i++) {
		for (j = 0; j < qwidth; j++) {
			int r, g, b;
			int ij;
			//计算
			ij = i * qwidth + j;
			r = (int)((GetRValue(N[ij])) * (1 - f) + GetRValue(M[ij]) * f);
			g = (int)((GetGValue(N[ij])) * (1 - f) + GetGValue(M[ij]) * f);
			b = (int)((GetBValue(N[ij])) * (1 - f) + GetBValue(M[ij]) * f);
			R[ij] = RGB(r, g, b);
		}
	}
 
 
	//贴出图片并释放内存
	putimage(x0, y0, &RS);
	FlushBatchDraw();// 绘制
}
//检测两个矩形是否相碰撞
int testHit(int x1,int y1,int w1,int h1,int x2,int y2,int w2,int h2 )
{
 return !(x1 + w1 < x2||
		 y1 + h1 < y2 ||
		 x2 + w2 <x1 ||
		 y2 + h2<y1 );
}
// 主函数,开启游戏
int main  ()
{
	initgraph(screenWidth, screenHeight,SHOWCONSOLE);		
	initgame();					// 初始化游戏
	paint();// 刷新显示游戏界面
	 
	flushmessage();		// 清空鼠标缓冲区
	while (_kbhit()) _getch();	// 清空键盘缓冲区
	run();						// 开始游戏
	closegraph();//关闭图形环
	return 0;
}
 
 
//--------------------------------// 
//TODO: 2 全局变量声明位置 
 
 
//TODO: 3 游戏初始化位置  
 void gameInit()
{
	 
}
 //TODO: 4 绘图处理位置  
void gamePaint()
{
  
}
 //TODO: 5 定时处理位置
void gameInterval()
{
	 
}
//TODO: 6 处理键盘控制位置
void gameKeypress(int key)
{
	switch (key )
	{
	case VK_LEFT:
		printf("按 左\n");
		break;
	case VK_RIGHT:
		printf("按 右\n");
		break;
	case VK_UP:
		printf("按 上\n");
		break;
	case VK_DOWN:
		printf("按 下\n");
		break;
	}
 
	switch (key )
	{
	case 'A':
	case 'a':
		printf("按 A\n");
		break;
	case 'B':
	case 'b':
		printf("按 B\n");
		break;
	case 'c':
	case 'C':
		printf("按 C\n");
		break;
	case 'D':
	case 'd':
		printf("按 d\n");
		break;
	}
}
 
//TODO: 7 处理鼠标控制位置
void gameMouseDown(int mouseX,int mouseY)
{
	printf("按下鼠标左键\n");
 
}
void gameMouseUp(int mouseX,int mouseY)
{
	 
}
void gameMousemove (int mouseX,int mouseY)
{
	 
}
 
void gameMouseRightDown(int mouseX,int mouseY)
{
	 
}


在这里插入图片描述

大家的点赞、收藏、关注将是我更新的最大动力! 欢迎留言或私信建议或问题。
大家的支持和反馈对我来说意义重大,我会继续不断努力提供有价值的内容!如果本文哪里有错误的地方还请大家多多指出(●'◡'●)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/567382.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

论述安科瑞智慧消防在高层建筑信息化管理中的作用

安科瑞 徐浩竣 江苏安科瑞电器制造有限公司 zx acrelxhj 【摘要】为了顺应时代的发展&#xff0c;我们做好信息化时代下的“智慧消防”工作&#xff0c;为“智慧城市”的建设奠定良好的基础。本文主要就“智慧消防”的含义、对如高层建筑等单位进行信息化“智慧消防”管理&a…

CryoEM - 使用 3DMod (IMOD) 评估蛋白质三维结构的质量

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://blog.csdn.net/caroline_wendy/article/details/130867416 IMOD 官网&#xff1a;The IMOD Home Page IMOD is a set of image processing, modeling and display programs used for to…

chatgpt赋能python:PythonShe-全面的SEO工具

Python She - 全面的SEO工具 在当今互联网时代&#xff0c;优化网站的排名对于企业的成功至关重要。Python She是一款可靠的SEO工具&#xff0c;它针对搜索引擎优化提供了全面的解决方案。本文将介绍Python She的功能以及如何使用它来提高您的网站排名。 Python She的功能 P…

从感官沉浸到无边界互操作,细数元宇宙游戏的底层逻辑世界

元宇宙已经不是全宇宙最热的概念了&#xff0c;冷下来之后或许才能踏踏实实落地。 元宇宙是下一代的互联网形态&#xff0c;是三维的“空间互联网”。或者说是大家更希望这是未来的互联网。我们将通过VR虚拟现实头盔、AR增强现实眼镜等一系列设备&#xff0c;体验三维化的互联…

《程序员的炫技代码》

程序员&#xff0c;这个职业总是让人感到神秘而又充满魅力。他们手中的代码常常充满了令人惊叹的炫技操作&#xff0c;让人不禁感叹他们的技术能力之高。在这篇文章中&#xff0c;我想和大家分享一些我所知道的程序员的炫技代码。 一行代码实现斐波那契数列 斐波那契数列是一…

外包公司程序员的水平真的很垃圾吗?

在互联网圈存在着这么一条鄙视链&#xff1a;大厂程序员看不起自研小厂程序员&#xff0c;自研小厂程序员看不起外包程序员&#xff0c;很多人觉得自己进了外包以后简历就被污染了&#xff0c;所以哪怕失业都不愿意进外包…… 实际上&#xff0c;何不食肉糜…… 外包可能还把你…

javaWebssh车辆保养管理系统myeclipse开发mysql数据库MVC模式java编程计算机网页设计

一、源码特点 java ssh车辆保养管理系统是一套完善的web设计系统&#xff08;系统采用ssh框架进行设计开发&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用 B/S模式开发。开发环境为TOMCAT7.…

Python竖版大屏 | 用pyecharts开发可视化的奇妙探索2

你好&#xff01;我是马哥python说&#xff0c;一名10年程序猿&#xff0c;正在试错用pyecharts开发可视化大屏的非常规排版。 以下&#xff0c;我用8种ThemeType展示的同一个可视化数据大屏&#xff0c;可视化主题是分析淄博烧烤现象。 1、SHINE主题 2、LIGHT主题 3、MACARO…

API测试| 了解API接口测试| API接口测试指南

什么是API&#xff1f; API是一个缩写&#xff0c;它代表了一个 pplication P AGC软件覆盖整个房间。API是用于构建软件应用程序的一组例程&#xff0c;协议和工具。API指定一个软件程序应如何与其他软件程序进行交互。 例行程序&#xff1a;执行特定任务的程序。例程也称为过…

23 # generator 的使用

1、类数组&#xff1a;长的像数组 const likeArray {0: "a",1: "b",2: "c",3: "d",length: 4 };可以 Array.from 将类数组转为数组 Array.from(likeArray) // [ a, b, c, d ]也可以使用拓展运算符&#xff1a;原理就是遍历这个对象…

【LIS的nlogn做法】ABC134 E - Sequence Decomposing

E - Sequence Decomposing (atcoder.jp) 题意&#xff1a; 思路&#xff1a; 让你求一个序列里上升子序列个数 Dilworth定理告诉我们答案就是最长非上升子序列长度 那就是反着用nlogn求最长上升子序列长度 可以当板子用 Code&#xff1a; #include <bits/stdc.h>#d…

死磕测试10余年,呕心整理出了核心知识点已经做成PDF,无私奉献

前言 想在面试、工作中脱颖而出&#xff1f;想在最短的时间内快速掌握软件测试的核心基础知识点&#xff1f;想要成为一位优秀的软件测试工程师&#xff1f;本篇文章能助你一臂之力&#xff01; 目前正值招聘求职旺季&#xff0c;很多同学对一些新技术名词都能侃侃而谈&#…

web自动化测试——定位几秒自动消失的弹窗

问题&#xff1a; 我们在进行web自动化测试时&#xff0c;会遇见需要定位那种几秒自动消失的弹窗中的元素&#xff0c;但是弹窗消失太快&#xff0c;经常会来不及操作。 解决办法&#xff1a; 1.在对应的页面按F12 &#xff0c;然后选择Sources&#xff1b; 2.在页面中进行操…

ISO21434 概述

目录 一、ISO21434 1.1 目的 1.2 ISO21434文档组织结构 二、适用范围 三、引用标准 四、术语和缩写 4.1 术语 4.2 缩写 五、一般考虑 一、ISO21434 1.1 目的 本文件阐述了道路车辆内电气和电子&#xff08;E/E&#xff09;系统工程中的网络安全问题。通过确保对网络安…

day03 MyBatis 核心

mapper接口和原理 之前的持久层组成部分:UserMapper.xmlIUserDAOUserDAOimpl 使用mapper接口:UserMapper.xmlUserMaper接口 mapper接口的好处; 避免持久层里面传入参数错误:以前里面写错了不会报错,只有等到运行代码才能看到错误,第二个参数的类型是Objiect MAPPer使用注意…

GC之查看GC日志

写在前面 本文一起看下如何查看GC日志。 1&#xff1a;环境准备 为了能更模拟真实的业务环境生成GC日志&#xff0c;我们首先来准备一个测试类&#xff0c;详细的注释已经在代码中&#xff0c;如下&#xff1a; import java.util.Random; import java.util.concurrent.TimeU…

从RE到RSE:聊聊无线产品EMC认证测试中的辐射项(上)

无线产品的EMC认证测试里&#xff0c;有两个与辐射发射有关的项目&#xff1a;Radiated Emission&#xff08;RE&#xff09;和Radiated Spurious Emission&#xff08;RSE&#xff09;。 RE和RSE&#xff0c;名字上仅一字之差&#xff0c;测试结果看起来也仿佛孪生哥俩。下面有…

unity四叉树和视锥体剔除

这个最好还是看代码&#xff0c;项目有注释放在这里&#xff1a; GetbadEarlyup/Quadtree-cone-scene: 这是一个unity四叉树场景视锥体剔除的Demo (github.com)https://github.com/GetbadEarlyup/Quadtree-cone-scene国内地址&#xff1a; Quadtree-cone-scene: unity四叉树和…

【接口测试】JMeter测试WebSocket接口

目录 一、WebSocket简介 二、JMeter测试WebSocket接口 三、WebSocket和Socket的区别 最近老被问到WebSocket&#xff0c;突然想到以前大学时上Java课的时候&#xff0c;老师教我们socket连接&#xff0c;一个同学电脑做客户端&#xff0c;一个同学电脑做服务端&#xff0c;…

软件测试的风险主要体现在哪里

软件测试的风险主要体现在哪里 在软件开发中&#xff0c;测试是至关重要的一环&#xff0c;它能够帮助我们及时发现和解决问题&#xff0c;提高软件质量&#xff0c;但同时也存在着一些风险。 首先&#xff0c;测试不充分可能导致漏洞存在。如果测试人员没有覆盖到某些场景或者…