精讲贪吃蛇(c语言篇)(代码可直接取)

本文主要介绍了如何使用C语言编写贪吃蛇游戏,包括所需的头文件、关键函数如Sleep、gotoxy、GetStdHandle的用法,以及游戏初始化、小蛇构造、移动控制、游戏失败判断的步骤。虽然没有详细介绍canvas函数,但提到了它是构图函数。文章最后提出了游戏升级的建议,如自动移动、速度调整和模式选择,以及改进游戏外观以提高用户体验。
摘要由CSDN通过智能技术生成

设计游戏(c语言篇)

一.该游戏中所用到的头文件可调用的函数

二.写贪吃蛇具体步骤(精华必看

三.将各步骤编译到一块即得到完整代码(调试检错)

四.对游戏进行优化和改良

一.
贪吃蛇算c中一个较为简单的游戏,其中要用到的函数较少且较为简单
1.1
在c语言里#include<Windows.h>是调用函数的头文件。
用到的函数有如下这些:

Sleep函数:
功 能: 执行挂起一段时间  
用 法: unsigned sleep(unsigned seconds);  
注意:  
1.在VC中使用带上头文件#include <windows.h>,在Linux下,gcc编译器中,使用的头文件因gcc版本的不同而不同#include <unistd.h> 
2.在VC中,Sleep中的第一个英文字符为大写的"S" ,在linux下不要大写,在标准C中是sleep, 不要大写,简单的说VC用Sleep, 别的一律使用sleep。
3.在VC中,Sleep()里面的单位,是以毫秒为单位,所以如果想让函数滞留1秒的话,应该是Sleep(1000); 在Linux下,sleep()里面的单位是秒,而不是毫秒。
试例:

#include<stdio.h>

#include <windows.h>  

int main()  
{
     
int a=100;  
Sleep(3000);  
printf("%d",a);

return 0;
} 

gotoxy函数,x,y 分别代表当前控制台窗口的 坐标。以左上为原点,X往右为正半轴,Y轴往下为正半轴,gotoxy 实现光标的移动。#include<windows.h>

GetStdHandle 函数,检索指定标准设备的句柄(标准输入、标准输出或标准错误)。#include<windows.h>

句柄(Handle)是一个是用来标识对象或者项目的标识符,可以用来描述窗体、文件等,值得注意的是句柄不能是常量,应该明白的是,句柄是一个标识符,是用来标识对象或者项目的。从数据类型上来看它只是一个16位的无符号整数。应用程序几乎总是通过调用一个Windows函数来获得一个句柄,之后其他的Windows函数就可以使用该句柄,以引用相应的对象。在 Windows编程中会用到大量的句柄。
1.2

void startup()是使画面初始化
void show()是呈现画面
试例:

void startup()
 {
   
  int i,j;
for(i=0;i<High;i++)
{
   
canvas[i][0] = -1;
canvas[i][Width-1]=-1; 
}
for(j=0;j<Width;j++)
{
   canvas[0][j]=-1;
canvas[High-1][j]=-1;
} 
 
 canvas[High/2][Width/2]=1;
 for(i=1;i<=4;i++)
 canvas[High/2][Width/2-i]=i+1;
 moveDirecation=4;
 food_x=rand()%(High-5)+2;
   food_y=rand()%(Width-5)+2;  
   canvas[food_x][food_y]=-2;
}

void show()
  {
   gotoxy(0,0);
  int i,j;
  for(i=0;i<High;i++)
  {
   
   for(j=0;j<Width;j++)
   {
   
   
   if(canvas[i][j]==0)
   printf(" ");
   else if(canvas[i][j]==-1)
   printf("#");
   else if(canvas[i][j]==1)
   printf("@");
   else if(canvas[i][j]>1)
   printf("*");
    else if(canvas[i][j]==-2)
 printf("F");
   

#include<stdlib.h>
 rand()函数是Excel中产生随机数的一个随机函数。返回的随机数是大于等于 0 及小于 1 的均匀分布随机实数,rand()函数每次计算工作表时都将返回一个新的随机实数。
注意
rand()函数可以用来产生随机数,但是这不是真真意义上的随机数,是一个伪随机数,是根据一个数,我们可以称它为种了,为基准以某个递推公式推算出来的一系数,
当这系列数很大的时候,就符合正态公布,从而相当于产生了随机数,但这不是真正的随机数,当计算机正常开机后,这个种子的值是定了的,除非你破坏了系统,为了改变这个种子的值,C提供了 srand()函数,它的原形是void srand( int a) ,
功能是初始化随机产生器既rand()函数的初始值,即使把种子的值改成a; 从这你可以看到通过sand()函数,可以产生可以预见的随机序列。
1.3

这里canvas函数是构图函数(因为这里主讲游戏的编译,就不去为大家普及关于cancas函数的详细用法了)

二.
2.1
构造小蛇:

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<windows.h>

#define High 20
#define Width 30  //游戏画面尺寸
int canvas[High][Width]={
   0};   //二维数组存储游戏画布中对应的元素

void gotoxy(int x,int y)  //光标的位置
{
   
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
COORD pos;
pos.X=x
  • 6
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
用windows api 做的贪吃蛇 #include #include"resource.h" #include"Node.h" #include #include TCHAR szAppname[] = TEXT("Snack_eat"); #define SIDE (x_Client/80) #define x_Client 800 #define y_Client 800 #define X_MAX 800-20-SIDE //点x的范围 #define Y_MAX 800-60-SIDE //点y的范围 #define TIME_ID 1 #define SECOND 100 #define NUM_POINT 10 //点的总个数 #define ADD_SCORE 10 LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { HWND hwnd; //窗口句柄 MSG msg; //消息 WNDCLASS wndclass; //窗口类 HACCEL hAccel;//加速键句柄 wndclass.style = CS_HREDRAW | CS_VREDRAW; //窗口的水平和垂直尺寸被改变时,窗口被重绘 wndclass.lpfnWndProc = WndProc; //窗口过程为WndProc函数 wndclass.cbClsExtra = 0; //预留额外空间 wndclass.cbWndExtra = 0; //预留额外空间 wndclass.hInstance = hInstance; //应用程序的实例句柄,WinMain的第一个参数 wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION); //设置图标 wndclass.hCursor = LoadCursor(NULL, IDC_ARROW); //载入预定义的鼠标指针 wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); //设置画刷 wndclass.lpszMenuName = szAppname; //设置菜单 wndclass.lpszClassName = szAppname; //设置窗口类的名字 if (!RegisterClass(&wndclass))//注册窗口类 { MessageBox(NULL, TEXT("这个程序需要windows NT!"), szAppname, MB_ICONERROR); return 0; } hwnd = CreateWindow(szAppname, TEXT("Snack_eat"),//CreateWindow函数调用时,WndProc将受到WM_CREATE WS_OVERLAPPEDWINDOW&~WS_THICKFRAME& ~WS_MAXIMIZEBOX,//普通的层叠窗口&禁止改变大小&禁止最大化 CW_USEDEFAULT, //初始x坐标(默认) CW_USEDEFAULT, //初始y坐标 x_Client, //初始x方向尺寸 770 y_Client, //初始y方向尺寸 750 NULL, //父窗口句柄 NULL, //窗口菜单句柄 hInstance, //程序实例句柄 WinMain函数中第二个参数 NULL); //创建参数 ShowWindow(hwnd, iCmdShow);//显示窗口,iCmdShow是WinMain的第四个参数,决定窗口在屏幕中的初始化显示形式,例:SW_SHOWNORMAL表示正常显示 UpdateWindow(hwnd);//使窗口客户区重绘,通过向WndProc发送一条WM_PAINT消息而完成的 hAccel = LoadAccelerators(hInstance, szAppname);//加载加速键 while (GetMessage(&msg, NULL, 0, 0)) { if (!TranslateAccelerator(hwnd, hAccel, &msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } }/* while (GetMessage(&msg, NULL, 0, 0))//GetMessage函数从消息队列中得到消息,填充msg。如果msg.message等于WM_QUIT,返回0,否则返回非0 { TranslateMessage(&msg);//将msg返回给windows已进行某些键盘消息的转换 DispatchMessage(&msg);//将msg再次返回给windows }*/ return msg.wParam;//msg.wParam是PostQuitMessage函数的参数值,通常是0 } ...
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值