首页 > 其他分享 >贪吃蛇游戏

贪吃蛇游戏

时间:2024-09-30 23:48:59浏览次数:8  
标签:游戏 句柄 贪吃蛇 KEY printf PRESS 控制台 光标

Win32 API知识

1. Windows 这个多作业系统除了协调应用程序的执行、分配内存、管理资源之外,它同时也是⼀个很大的服务中心,调用这个服务中心的各种服务(每⼀种服务就是⼀个函数),可以帮应用程序达到开启 视窗、描绘图形、使用周边设备等⽬的。

2. 由于这些函数服务的对象是应用程序(Application), 所以便称之为 Application Programming Interface,简称 API 函数。WIN32 API也就是Microsoft Windows 32位平台的应用程序编程接⼝。

控制台程序(CMD)

必要指令

1. 我们可以使⽤cmd命令来设置控制台窗⼝的⻓宽:设置控制台窗⼝的大小,100列,30⾏。

mode con cols=100 lines=30

2. 也可以通过命令设置控制台窗⼝的名字。

title 贪吃蛇

3. 需要在VS中设置成:默认终端程序让windows决定。

在VS中调用实现

1. 使用system()函数可以用来执行系统命令。

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main()
{
	system("mode con cols=100 lines=30");//调整CMD行与列
	system("title 贪吃蛇");//修改CMD的标题
	system("pause");//暂停观察
	return 0;
}

COORD结构体

1. COORD 是Windows API中定义的⼀个结构体

2. 表示⼀个字符在控制台屏幕幕缓冲区上的坐标,坐标系 (0,0) 的原点位于缓冲区的顶部左侧单元格。

2. 需要引入<windows.h>头文件。

#include <windows.h>
int main()
{
	COORD pos1 = { 0,0 };
	COORD pos2 = { 5,10 };
	return 0;
}

GetStdHandle函数

1. GetStdHandle是⼀个Windows API函数。

2. 它⽤于从⼀个特定的标准设备中取得⼀个句柄,使⽤这个句柄可以操作设备。

3.  句柄:数值上,是一个32位无符号整型值;逻辑上,相当于指针的指针;形象理解上,是Windows中各个对象的一个唯一的、固定不变的ID;作用上,Windows使用句柄来标识诸如窗口、位图、画笔等对象,并通过句柄找到这些对象。

HANDLE houtput = GetStdHandle(STD_OUTPUT_HANDLE);
//获取标准输出的句柄,存放在houtput中。

CONSOLE_CURSOR_INFO结构体

1. 成员1:dwSize,由光标填充的字符单元格的百分比,此值介于1到100之间。

2. 成员2:bVisible,光标的可见性。 如果光标可见,则此成员为 TRUE。

typedef struct _CONSOLE_CURSOR_INFO {
  DWORD dwSize;
  BOOL  bVisible;
} CONSOLE_CURSOR_INFO;

CONSOLE_CURSOR_INFO CursorInfo;//创建一个CONSOLE_CURSOR_INFO的结构体
CursorInfo.bVisible = false; //隐藏控制台光标

Get/SetConsoleCursorInfo函数

1. 获取/设定指定的控制台屏幕缓冲区的光标大小和可见性的信息。

2. 先获取,再设定。

HANDLE houtput = GetStdHandle(STD_OUTPUT_HANDLE);
//获取标准输出的句柄,存放在houtput中
CONSOLE_CURSOR_INFO CursorInfo;
//定义一个光标信息的结构体
GetConsoleCursorInfo(houtput, &CursorInfo);
//获取控制台光标信息
CursorInfo.bVisible = false; 
//隐藏控制台光标
SetConsoleCursorInfo(hOutput, &CursorInfo);
//设置控制台光标状态

 SetConsoleCursorPosition函数

1. 设置指定控制台屏幕缓冲区中的光标位置。

2. 我们将想要设置的坐标信息放在COORD类型的变量pos中,并且调用SetConsoleCursorPosition函数将光标位置设置到指定的位置。

    HANDLE houtput = GetStdHandle(STD_OUTPUT_HANDLE);
    //获取标准输出的句柄,存放在houtput中
	COORD pos2 = { 5,10 };
    //设定我们想要定位的坐标
	SetConsoleCursorPosition(houtput, pos2);   
    //将光标定位到pos2

GetAsyncKeyState函数

1. 将键盘上每个键的虚拟键值传递给函数,函数通过返回值来分辨按键的状态,GetAsyncKeyState 的返回值是short类型。

2. 如果返回的16位的short数据中,最⾼位是1,说明按键的状态是按下;如果最⾼是0,说明按键的状态是抬起。

3. 如果最低位被置为1则说明,该按键被按过,否则为0。

#include <stdio.h>
#include <windows.h>
#define KEY_PRESS(VK) ( (GetAsyncKeyState(VK) & 0x1) ? 1 : 0 )
int main()
{
	while (1)
	{
		if (KEY_PRESS(0x30))
		{
			printf("0\n");
		}
		else if (KEY_PRESS(0x31))
		{
			printf("1\n");
		}
		else if (KEY_PRESS(0x32))
		{
			printf("2\n");
		}
		else if (KEY_PRESS(0x33))
		{
			printf("3\n");
		}
		else if (KEY_PRESS(0x34))
		{
			printf("4\n");
		}
		else if (KEY_PRESS(0x35))
		{
			printf("5\n");
		}
		else if (KEY_PRESS(0x36))
		{
			printf("6\n");
		}
		else if (KEY_PRESS(0x37))
		{
			printf("7\n");
		}
		else if (KEY_PRESS(0x38))
		{
			printf("8\n");
		}
		else if (KEY_PRESS(0x39))
		{
			printf("9\n");
		}
	}
	return 0;
}
//直接返回我们输入的数字键

本地化  

1. C语⾔最初假定字符都是单字节的,但是这些假定并不是在世界的任何地⽅都适⽤。

2. <locale.h>头文件提供的函数用于控制C标准库中对于不同的地区会产⽣不⼀样⾏为的部分。

3. setlocale()函数⽤于修改当前地区,可以针对⼀个类项修改,也可以针对所有类项。

    setlocale(LC_ALL, " ");//切换到本地环境

宽字符 

1. 宽字符的字⾯量必须加上前缀“L”,否则 C 语⾔会把字⾯量当作窄字符类型处理。

2. 前缀“L”在单引号前⾯,表⽰宽字符,对应 wprintf() 的占位符为 %lc

3. 前缀“L”在双引号前⾯,表⽰宽字符串,对应 wprintf() 的占位符为 %ls 。 

#include <stdio.h>
#include<locale.h>
int main() {
 setlocale(LC_ALL, "");
 wchar_t ch1 = L'●';
 wchar_t ch2 = L'⽐';
 wchar_t ch3 = L'特';
 wchar_t ch4 = L'★';
 
 printf("%c%c\n", 'a', 'b');
 
 wprintf(L"%lc\n", ch1);
 wprintf(L"%lc\n", ch2);
 wprintf(L"%lc\n", ch3);
 wprintf(L"%lc\n", ch4);
 return 0;
}

标签:游戏,句柄,贪吃蛇,KEY,printf,PRESS,控制台,光标
From: https://blog.csdn.net/hsy1603914691/article/details/142455297

相关文章

  • 小骨英雄杀手》游戏故障排查:steam_api64.dll文件丢失怎么办?
    面对《小骨英雄杀手》游戏中出现的“steam_api64.dll文件丢失”的故障,玩家可以采取以下措施进行排查和解决:一、确认问题原因未通过Steam启动:如果直接从游戏目录启动游戏,而非通过Steam客户端,可能会导致此问题。文件丢失或损坏:在安装过程中该文件可能未能正确复制,或者被杀毒软......
  • C语言1—100的数字炸弹小游戏
    #define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h> #include<stdlib.h>#include<time.h>void menu(){printf("1=开始游戏\n");printf("0=不进行游戏\n");printf("请选择:");}void game(){int num=rand()%100+1; int inp......
  • Unity实战案例全解析:RTS游戏的框选和阵型功能(5)阵型功能 优化一
    前篇:Unity实战案例全解析:RTS游戏的框选和阵型功能(4)阵型功能-CSDN博客本案例来源于unity唐老狮,有兴趣的小伙伴可以去泰克在线观看该课程我只是对重要功能进行分析和做出笔记分享,并未无师自通,吃水不忘打井人本案例的实现流程图 兵种排序  首先在一个阵型中,我们希望远......
  • 小游戏-三子棋
    目录一、头文件(game.h)二、主程序(test.c)三、调用函数程序(game.c)一、头文件(game.h)#defineRow3#defineCol3#include<stdio.h>#include<stdlib.h>#include<time.h>//头文件中声明函数//棋盘初始化voidchessboard_initialize(charboard[Row][Col],......
  • 数组中洛谷p1427小鱼的数字游戏
    先来看看题目吧:然后先来复习一下数组:你需要了解:数组的定义,数组的创建,数组的初始化,数组的使用(尤其是数组下标是从零开始的!)然后就来看思路吧:......
  • 如何提高游戏本地化的质量使用QE门户网站Logrus IT
    高质量的游戏本地化是全球市场成功的关键。这尤其适用于AAA和AA级别的游戏,玩家在这些游戏中投入了大量资金,并期望从中获得完美的游戏体验。尽管公司做出了努力,但传统的质量控制方法并不总是能够防止所有错误和本地化不准确。让我们更详细地研究这个问题。企业面临哪些挑战游......
  • P11093 [ROI 2021 Day 2] 树制游戏 题解
    考虑对于一个解,将每对\((e_1,e_2)\)中\(e_1\)的终点权值\(+1\),\(e_2\)的起点权值\(-1\),那么最终每个点的权值一定是\(0\)。考虑先将每条边的终点权值都\(+1\),那么现在要做的就是选一些点将其起点和终点的权值都\(-1\),使得最终每个点的权值为\(0\),于是边的方向就不重要......
  • 蓝禾,汤臣倍健,三七互娱,得物,顺丰,快手,游卡,oppo,康冠科技,途游游戏,埃科光电25秋招内推
    蓝禾,汤臣倍健,三七互娱,得物,顺丰,快手,游卡,oppo,康冠科技,途游游戏,埃科光电25秋招内推①蓝禾【岗位】国内/国际电商运营,设计,研发,营销,职能,工作地:深圳【校园大使推荐码】71T3HES【一键内推】https://sourl.cn/68rjxY②得物【八大职类】技术、供应链、产品、运营、设计、职能、商......
  • 郁金香游戏辅助教程笔记-七-
    郁金香游戏辅助教程笔记(七)P200:217-游戏多开补丁编写_old-教到你会-BV1DS4y1n7qF大家好,我是郁金香老师,那么上一节课呢我们简单的探讨了,那以下这个游戏多开的另外的一种原理,那么这节课呢我们通过上上一节课分析的数据。然后呢来编写相应的代码,那么首先我们打开vs2010。......
  • 郁金香游戏辅助教程笔记-九-
    郁金香游戏辅助教程笔记(九)P55:066-NPC菜单选择CALL-教到你会-BV1DS4y1n7qF大家好,我是郁金香老师,那么在上一节课呢,我们分析了打开npc菜单的功能,那么这节课呢我们主要来分析一下呃,npc菜单选择的一个功能,我们说的肾的函数进行一个下段,然后回溯。当然我们今天这个游戏呢它是用的......