贪吃蛇游戏(必备知识篇)

简介: 贪吃蛇游戏(必备知识篇)

前言

 这是我自己做的第五个小项目---贪吃蛇游戏(必备知识篇)。后期我会继续制作其他小项目并开源至博客上。


 上一小项目是通讯录项目,没看过的同学可以去看看:


有关通讯录的小项目

https://blog.csdn.net/hsy1603914691/article/details/142502235?spm=1001.2014.3001.5501


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;
}

致谢

感谢您花时间阅读这篇文章!如果您对本文有任何疑问、建议或是想要分享您的看法,请不要犹豫,在评论区留下您的宝贵意见。每一次互动都是我前进的动力,您的支持是我最大的鼓励。期待与您的交流,让我们共同成长,探索技术世界的无限可能!

相关文章
|
2天前
|
Java
Java实现贪吃蛇游戏
本文介绍了如何使用Java实现一个简单的贪吃蛇游戏。
26 4
|
3月前
贪吃蛇游戏(代码篇)
贪吃蛇游戏(代码篇)
141 0
|
8月前
|
开发工具 索引 Python
python实现贪吃蛇游戏
贪吃蛇是我们小时候的一款经典游戏,毕竟在那个Nokia称霸的年代,这款游戏可是经典中的经典啊!而用Python(蛇)玩Snake(贪吃蛇),那再合适不过了。
126 1
python实现贪吃蛇游戏
|
8月前
泡泡龙游戏开发实战教程(1):泡泡龙游戏的布局
泡泡龙游戏开发实战教程(1):泡泡龙游戏的布局
105 0
|
8月前
|
C语言
探索经典游戏:扫雷小游戏
探索经典游戏:扫雷小游戏
117 0
|
8月前
|
算法
连连看游戏系列教程开篇
连连看游戏系列教程开篇
121 0
|
数据挖掘 开发者
关于泡泡龙游戏的一点儿总结,以及分享一个好方法
游戏是一种虚拟的产品,它很难被量化,也很难像工厂流水线生产实体产品一样的去生产。因为其中涉及到的情况太多太杂,如何衡量一个游戏的体量?怎样的游戏算是大游戏,怎样的游戏算是小游戏呢?如何判断一个游戏是做完了还是没有做完呢?如何衡量一个游戏开发者的水平呢?……等等等等。这里面的每一个因素都是一个变量,这么多的无法确定的变量合在一起,想要得到一个确定的结果,很显然是不太可能的。
174 0
|
开发者
从零开始制作一个俄罗斯方块游戏
小蚂蚁的游戏目前已经上线,主要面向的是有一定基础的同学。从零开始制作一个经典的俄罗斯方块游戏,理论结合实战,帮助你进一步提升做游戏的技能。
167 0
|
开发工具
想学做游戏到底该怎么学
嗨!大家好,我是小蚂蚁。 遇到过很多想学习做游戏却又不得章法的人,有些人可能只是有个想法,有些人真的付诸了行动。但是大部分人最终都是以失败而告终的,不是说最终没有做出来一个游戏,而是连第一步的门槛也没迈的过去。 做游戏做了这么多年,也教了不少的学员,我觉得我至少有一定的经历,可以来说一下,想学习做游戏到底该怎么学。
226 0
|
算法 索引 容器
如何做一个俄罗斯方块游戏(二)
嗨!大家好,我是小蚂蚁。今天我们继续学习如何做一个俄罗斯方块游戏。整个系列教程计划按照这个流程图开展,这也是我制作整个游戏的过程,今天我们就来看一下“随机生成形状”这个模块。想要实现随机的生成形状,首先必须要知道在俄罗斯方块中一共有多少种形状(也就是我们上一节中留下的第二个问题)。
200 0