利用C/C++实现贪吃蛇游戏

利用C/C++实现贪吃蛇

(注意:本文章仅供参考,第一次写博客还请多多指教。理解本文章需要easyx和c++等基础知识,并且需要了解贪吃蛇游戏机制

贪吃蛇机制介绍

相信绝大多数人都曾玩过或者了解过贪吃蛇这款经典的游戏。贪吃蛇顾名思义,就是让蛇尽可能的吃食物。玩家可通过方向键或自定义键来控制蛇头的方向,使它吃到地图出现的随机食物。蛇每吃到一个食物,自身便会增长。当蛇碰到地图的边界或是蛇碰到自身,蛇便会死亡,游戏便结束。

机制大概了解过后,我们将考虑如何实现这类游戏。

设计与分析

首先,我们分析游戏整体结构大概由四个部分构成——界面、地图、蛇、食物。
1、界面:界面能够方便玩家的使用,可让玩家自行选择游戏的开始或结束;通过界面,我们可以设定一些有趣的东西来增加玩家的游戏体验,例如:让玩家选择蛇的速度,以灵活调节游戏难度。
2、地图:地图能为蛇提供活动空间,同时也是蛇位置的坐标轴,方便定位。
3、蛇:蛇是游戏的灵魂。蛇可以定义如下属性:坐标、方向、速度、长度。蛇。蛇的行为有:移动、吃食物、死亡。
4、食物:食物在地图中随机分布,具有坐标(可以尝试去增加颜色属性、大小属性,本文章由于篇幅有限,暂不提供)。

思维导图如下

首先设计用户界面

//部分函数可以暂时不用考虑
void menu()
{
 initgraph(640, 480);
 int flag = 1;
 while (flag)
 {
  cleardevice();
  outtextxy(280, 180, "贪吃蛇游戏");
  outtextxy(280, 200, "按1开始游戏");
  outtextxy(280, 220, "按2结束游戏");
  //接受输入指令0、1
  char ch = _getch();
  switch (ch)
  {
  //开始
  case '1':
  {
   food F;
   Initfood(F);//食物初始化

   Snake S;
   hatch(S);//蛇初始化
   control_speed(S.speed);//蛇速度控制函数
   drawsnake(S, F);//开始绘制游戏面板
   break;
  }
  //结束
  case '2':
   flag = 0;
   break;
  default :
   break;
  }
 }
 closegraph();
}

接下来可以通过结构体来定义蛇和食物

typedef struct Snake {
 int speed = 0;//速度
 pair<int, int> coor[MAXSIZE]={};//坐标(x, y)
 int dir;//方向
 int length;//长度
};

typedef struct food {
 pair<int, int> place[MAXSIZE] = {};//坐标
 int score;//分数
};

接下来将食物和蛇进行初始化

void Initfood(food& F)
{
 F.score = 0;
 srand(time(NULL));
 //将食物坐标随机设置
 for (int i = 0; i < 100; i++)
 {
  F.place[i].first = rand() % (640 - R) + R;
  F.place[i].second = rand() % (480 - R) + R;
 }
}

void hatch(Snake &S)
{
 S.length = 3;
 S.dir = 2;
 S.speed = 0;
 //先给出3节身体
 for (int i = 0; i < 3; i++)
 {
  S.coor[i].first = 40 - i * 10;
  S.coor[i].second = 30;
 }
}

再接着设计蛇速度控制函数

void control_speed(int &speed)
{
 cleardevice();
 outtextxy(280, 180, "请选择蛇的速度1-5");
 char ch = _getch();
 speed = ch - '0';
}

最关键的蛇运动机制设计来了,我将分段讲解

1、绘制蛇(蛇将有一系列正方体块组成)

for (int i = 0; i < S.length; i++)
  {
   int x = S.coor[i].first;
   int y = S.coor[i].second;
   //蛇头设为绿色,方便区分
   if (i == 0)
   {
    setfillcolor(GREEN);
    solidrectangle(x - R, y - R, x + R, y + R);
   }

   else
   {
    setcolor(WHITE);
    rectangle(x - R, y - R, x + R, y + R);
   }

2、绘制食物(食物由单个正方体组成)

int m = F.place[F.score].first;
int n = F.place[F.score].second;
setfillcolor(WHITE);
solidrectangle(m-R, n-R, m+R, n+R);

3、蛇的运动

像人的运动是通过脚向前迈步来制动整个躯干一样,蛇头同样驱动整个身体。也就是说我们只要控制蛇头的运动方向及前进,躯干便会跟着蛇头一起移动。蛇躯干的每个节点只需要继承上一个节点的位置即可。

void movesnake(Snake& S)
{
//继承坐标
 for (int i = S.length - 1; i > 0; i--)
 {
  S.coor[i].first = S.coor[i - 1].first;
  S.coor[i].second = S.coor[i - 1].second;
 }
 switch (S.dir)
 {
 case 1:
  S.coor[0].second-= 10;
  break;
 case 2:
  S.coor[0].first+=10;
  break;
 case 3:
  S.coor[0].second+=10;
  break;
 case 4:
  S.coor[0].first-=10;
  break;
 default:
  break;
 }
}

4、蛇运动控制

使用方向键改变蛇头的运动方向即可

void control_dir(int& DIR)
{
 char ch = _getch();
 switch (ch)
 {
 case 72:
 case 'W':
 case 'w':
 //这里用if主要是因为蛇运动的机制:当蛇在一某方向运动的途中,不能直接往反方向运动(这样会导致蛇身体重叠),只能通过以当前运动方向为正方向,进行左右移动来改变方向。
  if (DIR != 3)
   DIR = 1;
  break;
 case 77:
 case 'D':
 case 'd':
  if (DIR != 4)
   DIR = 2;
  break;
 case 80:
 case 'S':
 case 's':
  if (DIR != 1)
   DIR = 3;
  break;
 case 75:
 case 'A':
 case 'a':
  if (DIR != 2)
   DIR = 4;
  break;
 default:
  break;
 }
}

4、吃食物

吃完食物的结果:出现下一个食物、蛇变长

void Eating(Snake& S, food& F)
{
 if (S.coor[0].first >= F.place[F.score].first - R&& S.coor[0].first <= F.place[F.score].first + R
  && S.coor[0].second >= F.place[F.score].second -R&& S.coor[0].second <= F.place[F.score].second+R)
 {
  F.score++;
  S.length++;
 }
}

5、判断是否死亡

死亡判断有两种结果:1、碰壁。2、自身形成回路(自己咬自己)

int isdead(Snake S)
{
 if (S.coor[0].first > 640-R || S.coor[0].first < R || S.coor[0].second>480-R || S.coor[0].second<=R)
  return 1;
 else
 {
  for (int i = 4; i < S.length; i++)
  {
   if (S.coor[0].first >= S.coor[i].first-R&& S.coor[0].first <= S.coor[i].first + R
    && S.coor[0].second >= S.coor[i].second-R&& S.coor[0].second <= S.coor[i].second+R)
    return 1;
  }
  return 0;
 }
}

蛇的运动机制设计基本大功告成,可以自行在地图上进行修饰,像加入分数栏

void control_dir(int& DIR)
{
 char ch = _getch();
 switch (ch)
 {
 case 72:
 case 'W':
 case 'w':
  if (DIR != 3)
   DIR = 1;
  break;
 case 77:
 case 'D':
 case 'd':
  if (DIR != 4)
   DIR = 2;
  break;
 case 80:
 case 'S':
 case 's':
  if (DIR != 1)
   DIR = 3;
  break;
 case 75:
 case 'A':
 case 'a':
  if (DIR != 2)
   DIR = 4;
  break;
 default:
  break;
 }
}

void movesnake(Snake& S)
{
 for (int i = S.length - 1; i > 0; i--)
 {
  S.coor[i].first = S.coor[i - 1].first;
  S.coor[i].second = S.coor[i - 1].second;
 }
 switch (S.dir)
 {
 case 1:
  S.coor[0].second-= 10;
  break;
 case 2:
  S.coor[0].first+=10;
  break;
 case 3:
  S.coor[0].second+=10;
  break;
 case 4:
  S.coor[0].first-=10;
  break;
 default:
  break;
 }

}

int isdead(Snake S)
{
 if (S.coor[0].first > 640-R || S.coor[0].first < R || S.coor[0].second>480-R || S.coor[0].second<=R)
  return 1;
 else
 {
  for (int i = 4; i < S.length; i++)
  {
   if (S.coor[0].first >= S.coor[i].first-R&& S.coor[0].first <= S.coor[i].first + R
    && S.coor[0].second >= S.coor[i].second-R&& S.coor[0].second <= S.coor[i].second+R)
    return 1;
  }
  return 0;
 }
}

void Eating(Snake& S, food& F)
{
 if (S.coor[0].first >= F.place[F.score].first - R&& S.coor[0].first <= F.place[F.score].first + R
  && S.coor[0].second >= F.place[F.score].second -R&& S.coor[0].second <= F.place[F.score].second+R)
 {
  F.score++;
  S.length++;
 }
}

void drawsnake(Snake& S, food F)
{
 char out[3] = {};

 BeginBatchDraw();
 while (1)
 {
  cleardevice();
  for (int i = 0; i < S.length; i++)
  {
   int x = S.coor[i].first;
   int y = S.coor[i].second;
   if (i == 0)
   {
    setfillcolor(GREEN);
    solidrectangle(x - R, y - R, x + R, y + R);
   }

   else
   {
    setcolor(WHITE);
    rectangle(x - R, y - R, x + R, y + R);
   }

  }
  int m = F.place[F.score].first;
  int n = F.place[F.score].second;
  setfillcolor(WHITE);
  solidrectangle(m-R, n-R, m+R, n+R);

  sprintf_s(out, "%d", F.score * S.speed);
  setbkmode(0);
  outtextxy(570, 20, "得分");
  outtextxy(620, 20, out);

  FlushBatchDraw();
  Sleep(200-S.speed*30);

  while(_kbhit())
  {
   control_dir(S.dir);
  }

  movesnake(S);

  Eating(S, F);
  if (isdead(S))
   break;
 }
 cleardevice();
 sprintf_s(out, "%d", F.score * S.speed);
 outtextxy(280, 180, "得分");
 outtextxy(320, 180, out);
 outtextxy(280, 200, "按Enter键继续");

 FlushBatchDraw();
 getchar();
 EndBatchDraw();
}

完整代码如下

#include <iostream>
#include <graphics.h>
#include <conio.h>
#include <time.h>
using namespace std;

#define MAXSIZE 100
#define R 5
typedef struct Snake {
 int speed = 0;//速度
 pair<int, int> coor[MAXSIZE]={};
 int dir = 2;
 int length = 3;
};

typedef struct food {
 pair<int, int> place[MAXSIZE] = {};
 int score;
};

void Initfood(food& F)
{
 F.score = 0;
 srand(time(NULL));
 for (int i = 0; i < 100; i++)
 {
  F.place[i].first = rand() % (640 - R) + R;
  F.place[i].second = rand() % (480 - R) + R;
 }
}

void hatch(Snake &S)
{
 S.length = 3;
 S.dir = 2;
 S.speed = 0;
 for (int i = 0; i < 3; i++)
 {
  S.coor[i].first = 40 - i * 10;
  S.coor[i].second = 30;
 }
}

void control_speed(int &speed)
{
 cleardevice();
 outtextxy(280, 180, "请选择蛇的速度1-5");
 char ch = _getch();
 speed = ch - '0';
}

void control_dir(int& DIR)
{
 char ch = _getch();
 switch (ch)
 {
 case 72:
 case 'W':
 case 'w':
  if (DIR != 3)
   DIR = 1;
  break;
 case 77:
 case 'D':
 case 'd':
  if (DIR != 4)
   DIR = 2;
  break;
 case 80:
 case 'S':
 case 's':
  if (DIR != 1)
   DIR = 3;
  break;
 case 75:
 case 'A':
 case 'a':
  if (DIR != 2)
   DIR = 4;
  break;
 default:
  break;
 }
}

void movesnake(Snake& S)
{
 for (int i = S.length - 1; i > 0; i--)
 {
  S.coor[i].first = S.coor[i - 1].first;
  S.coor[i].second = S.coor[i - 1].second;
 }
 switch (S.dir)
 {
 case 1:
  S.coor[0].second-= 10;
  break;
 case 2:
  S.coor[0].first+=10;
  break;
 case 3:
  S.coor[0].second+=10;
  break;
 case 4:
  S.coor[0].first-=10;
  break;
 default:
  break;
 }

}

int isdead(Snake S)
{
 if (S.coor[0].first > 640-R || S.coor[0].first < R || S.coor[0].second>480-R || S.coor[0].second<=R)
  return 1;
 else
 {
  for (int i = 4; i < S.length; i++)
  {
   if (S.coor[0].first >= S.coor[i].first-R&& S.coor[0].first <= S.coor[i].first + R
    && S.coor[0].second >= S.coor[i].second-R&& S.coor[0].second <= S.coor[i].second+R)
    return 1;
  }
  return 0;
 }
}

void Eating(Snake& S, food& F)
{
 if (S.coor[0].first >= F.place[F.score].first - R&& S.coor[0].first <= F.place[F.score].first + R
  && S.coor[0].second >= F.place[F.score].second -R&& S.coor[0].second <= F.place[F.score].second+R)
 {
  F.score++;
  S.length++;
 }
}

void drawsnake(Snake& S, food F)
{
 char out[3] = {};

 BeginBatchDraw();
 while (1)
 {
  cleardevice();
  for (int i = 0; i < S.length; i++)
  {
   int x = S.coor[i].first;
   int y = S.coor[i].second;
   if (i == 0)
   {
    setfillcolor(GREEN);
    solidrectangle(x - R, y - R, x + R, y + R);
   }

   else
   {
    setcolor(WHITE);
    rectangle(x - R, y - R, x + R, y + R);
   }

  }
  int m = F.place[F.score].first;
  int n = F.place[F.score].second;
  setfillcolor(WHITE);
  solidrectangle(m-R, n-R, m+R, n+R);

  sprintf_s(out, "%d", F.score * S.speed);
  setbkmode(0);
  outtextxy(570, 20, "得分");
  outtextxy(620, 20, out);

  FlushBatchDraw();
  Sleep(200-S.speed*30);

  while(_kbhit())
  {
   control_dir(S.dir);
  }

  movesnake(S);

  Eating(S, F);
  if (isdead(S))
   break;
 }
 cleardevice();
 sprintf_s(out, "%d", F.score * S.speed);
 outtextxy(280, 180, "得分");
 outtextxy(320, 180, out);
 outtextxy(280, 200, "按Enter键继续");

 FlushBatchDraw();
 getchar();
 EndBatchDraw();
}

void menu()
{
 initgraph(640, 480);
 int flag = 1;
 while (flag)
 {
  cleardevice();
  outtextxy(280, 180, "贪吃蛇游戏");
  outtextxy(280, 200, "按1开始游戏");
  outtextxy(280, 220, "按2结束游戏");
  char ch = _getch();
  switch (ch)
  {
  case '1':
  {
   food F;
   Initfood(F);

   Snake S;
   hatch(S);
   control_speed(S.speed);
   drawsnake(S, F);
   break;
  }
  case '2':
   flag = 0;
   break;
  default :
   break;
  }
 }
 closegraph();
}

int main(void)
{
 menu();
 return 0;
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C++ 实战开发一个猜单词的小游戏

    目录 前言 效果展示 一.函数接口 二.重要函数接口详解 1.菜单内容 2.退出程序 3.打开单词文件 4.开始游戏 5.查看玩家排名 6.清空玩家排名 7.玩家排名 全部代码展示 前言 程序内的单词全部保存于word.txt的文本文档中,玩家排名保存在rand.txt文本文档中.运行程序时,会自动读取文本中的内容. 游戏规则:①先请用户输入猜的单词数量,可以有一个默认值.②随机抽取单词,对每个单词,系统根据谜底单词长度在屏幕上显示相应个数'#',假设谜底单词为"hello",则在屏幕

  • C++入门指南之贪吃蛇游戏的实现

    目录 参考 贪吃蛇游戏 程序框架 绘制游戏地图和蛇 小蛇向右移动 控制小蛇4个方向移动 时间控制的改进 失败判断与显示 添加食物 完整代码 总结 参考 <C和C++游戏趣味编程> 贪吃蛇游戏 键盘控制小蛇上.下.左.右移动,迟到食物后长度加1:蛇头碰到自身或窗口边缘,游戏失败 程序框架 #include <graphics.h> #include <conio.h> #include <stdio.h> // 全局变量定义 void startup() //

  • C++语言实现拼图游戏详解

    目录 开发环境:Visual Studio 2019,easyx图形库. 游戏功能列表: 游戏效果 一.头文件和基本量 二.封面 三.数据初始化 四.封面规则按钮 五.构造拼图 六.绘图函数 七.背景音乐 八.数据更新 九.通关判断 十.完整程序 总结 开发环境:Visual Studio 2019,easyx图形库. easyx下载官网: EasyX Graphics Library for C++ https://easyx.cn/ easyx使用文档: EasyX 文档 - 函数说明 ht

  • C++入门之实现十步万度游戏

    参考 <C和C++游戏趣味编程> 童晶 十步万度游戏 用鼠标点击任意一个小圆圈,其指针顺时针旋转90度,后续被指向的圆圈指针也依次旋转,所有圆圈的旋转度数累积.玩家点击10次,尝试得到尽量高的旋转度数 绘制圆圈和指针 定义一个结构体Round,用于保存圆圈的信息,成员变量有圆圈的圆心坐标.半径和角度.进一步,定义一个Round类型的二维数组,保存所有圆圈的信息 #include <graphics.h> #include <conio.h> #include <m

  • C++实现简易贪吃蛇游戏

    C++实现建议贪吃蛇(不会闪屏幕) 使用vs2013完成.记录踏上游戏开发的道路. 效果图 代码 // 2021.7.24.1贪吃蛇.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> #include <list> #include <numeric> #include <algorithm> #include <Windows.h> #includ

  • C++实现简易的弹球小游戏

    本文实例为大家分享了C++实现弹球小游戏的具体代码,供大家参考,具体内容如下 操作说明:键盘A和D键控制左右移动,让球不要落下. #include <graphics.h> #include <conio.h> #include <time.h> int i; int xx=0; int yy = 0; class Ball { public: int x, y; clock_t b; void draw() { setfillcolor(RGB(200, 399, 1

  • C++实现俄罗斯方块小游戏

    本文实例为大家分享了C++实现俄罗斯方块小游戏的具体代码,供大家参考,具体内容如下 操作说明: D F:左右旋转 J  L:左右移动 E(一堆键都行): 加快下落速度 空格: 开始游戏 与 一落到底 上代码! #include <cstdio> #include <cstdlib> #include <cstring> #include <windows.h> #include <ctime> #include <conio.h> #

  • 使用c++编程实现简单的打字小游戏

    目录 你是否对键盘熟悉? "qwertyuiopasdfghjklzxcvbnm"是否已经印在你的脑海里? NO? 没有关系,今天,让我来帮你对键盘有一个更深一步的了解吧! #include"stdio.h" #include"stdlib.h" #include"windows.h" #include"conio.h" void entry_place(int num) { for(int i;i<

  • 用C++实现推箱子小游戏

    前言 推箱子小游戏相信是很多人的同年记忆了,今天用c++语言来尝试下,用的是vs编译器. 代码还有很多可以优化的地方,为了更直观了解函数的形参和实参,所以地图没有用全局变量声明了,其实用全局变量声明会简洁很多. 头文件和main函数分享在最下面了. 提示:以下是本篇文章正文内容,下面案例可供参考 一.初始化游戏数据 void GameInit(int(*&pMap)[10][10], int index)//两张地图数据 { // static:返回静态全局区变量 static int loca

  • 利用Flutter制作经典贪吃蛇游戏

    目录 前言 使用 Flutter 作为游戏引擎 画蛇 2D 渲染的基础 创建蛇 填写列表 将蛇移动到下一个位置 添加运动和速度 添加控件 改变方向 吃东西和提高速度 在屏幕上显示食物 消耗和再生食物 检测碰撞并显示游戏结束对话框 添加一些收尾工作 重启游戏 显示分数 前言 Flutter (Channel stable, 2.10.3, on Microsoft Windows [Version 10.0.19044.1586], locale zh-CN) Android toolchain

  • 利用C/C++实现贪吃蛇游戏

    利用C/C++实现贪吃蛇 (注意:本文章仅供参考,第一次写博客还请多多指教.理解本文章需要easyx和c++等基础知识,并且需要了解贪吃蛇游戏机制) 贪吃蛇机制介绍 相信绝大多数人都曾玩过或者了解过贪吃蛇这款经典的游戏.贪吃蛇顾名思义,就是让蛇尽可能的吃食物.玩家可通过方向键或自定义键来控制蛇头的方向,使它吃到地图出现的随机食物.蛇每吃到一个食物,自身便会增长.当蛇碰到地图的边界或是蛇碰到自身,蛇便会死亡,游戏便结束. 机制大概了解过后,我们将考虑如何实现这类游戏. 设计与分析 首先,我们分析游

  • 利用C/C++实现较完整贪吃蛇游戏

    记得在大一时刚学习c/c++语言,学到一半突然想用这门语言做一些小游戏出来,首先想到的便是贪吃蛇.于是本人利用空余时间写出了这么一个简单的小游戏. 由于当时的我还没有能力构造出用户界面,故直接使用dos界面运行.那么问题来了,如何让一个字符在dos界面上自由移动???对于这个问题我采用的解决方案是实现gotoxy函数来控制指针位置从而实现字符的移动.那么我们就先来实现这个函数. gotoxy 函数并非系统函数,我将其储存于 gotoxy.h 的头文件中方便调用. gotoxy.h #includ

  • 教你一步步利用python实现贪吃蛇游戏

    0 引言 前几天,星球有人提到贪吃蛇,一下子就勾起了我的兴趣,毕竟在那个Nokia称霸的年代,这款游戏可是经典中的经典啊!而用Python(蛇)玩Snake(贪吃蛇),那再合适不过了

  • 利用python实现简易版的贪吃蛇游戏(面向python小白)

    引言 作为python 小白,总是觉得自己要做好百分之二百的准备,才能开始写程序.以至于常常整天在那看各种语法教程,学了几个月还是只会print('hello world'). 这样做效率太低,正确的做法,是到身边找问题,然后编程实现.比如说,我学了高等数学,我是不是应该考虑下如何去用编程实现求导或者积分操作,如果想不出怎么办,是不是应该 baidu 一下,别人是如何实现数值积分或是符号积分的.我们每天买东西都要用到加减甚至乘除,那么我是否能编写个简单的计算器,如果命令行太丑的话,我是否能够快速

  • python实战之利用pygame实现贪吃蛇游戏(二)

    一.前言 在上一篇博客中,我们实现了基本的界面搭建,这次实现一下逻辑部分. 二.创建蛇 首先,先分析一下蛇的移动,不然我们一定会吃亏的(别问,问就是自己写了一堆无效代码). 蛇的移动其实并没有想象中那样复杂,每一个模块都需要有一个方向,按照方向进行移动. 其实实际上就是一个出队的感觉,即每一个元素都取代上一个元素的位置,然后再按照贪吃蛇当前的方向,移动一下头节点即可. snake.py: """"

  • python实战之利用pygame实现贪吃蛇游戏(一)

    一.前言 之前尝试了自己用pygame写井字棋,这次玩的是贪吃蛇系列. 个人感觉模块可能会比较大,所以选择将函数和主要逻辑代码分在了两个文件中. fuc为函数模块,存储了事件感应和刷新界面等部分. main模块则是游戏的核心. 二.搭建界面 这里我就不重复了,可以先看一下这篇博客 其中界面的基本要素都有. main.py import pygame from fuc import * # 基本属性 lattice_wh = 20 #长宽 snake_color = (84, 255, 159)

  • Python利用手势识别实现贪吃蛇游戏

    目录 一.前言 二.项目介绍 1.游戏的操作方式 2.开发的过程中的注意事项 三.游戏的实现要点 1.选择第三方库 2.找到关键点并标记 3.创建一个类来保存关于游戏的所有功能 4.定义函数进行不断更新 四.总体代码 一.前言 想必大家都玩过贪吃蛇的游戏吧:通过操纵蛇的移动方向能够让蛇吃到随机出现的食物,吃到的食物越多,蛇就会变得越长,但如果不小心撞到了自己,那么蛇就会死亡,game over!! 我们玩过的贪吃蛇游戏一般都是在手机或者游戏机上进行的,通过方向键操纵蛇的移动,那么我们是否可以直接

  • 利用TypeScript编写贪吃蛇游戏

    目录 Explanation 1. tsconfig.json配置 2. HTML & CSS 布局相关 3. TS核心逻辑 项目源码链接 先来康康效果图 我接下来将讲解相关配置和代码,源码链接放在最底下了,在GitHub上. Explanation 1. tsconfig.json配置 { "compilerOptions": { "target": "ES2015", "module": "ES2015&

  • java贪吃蛇游戏编写代码

    本文实例为大家分享了java贪吃蛇游戏展示的具体代码,供大家参考,具体内容如下 1.采用MVC(model.view.control)框架模式 2.包和类的关系树形图为: 3.源码: package com.huai; import Java.awt.Color; import java.awt.Graphics; import java.awt.Point; import java.util.HashSet; import java.util.LinkedList; import java.u

随机推荐