源码地址:oohSunset/-2-: 贪吃蛇(跟着老师实现)
贪吃蛇
本篇文章是先不看老师教程的情况下,自己独立来完成的,顺便记录一下实现的过程。
项目展示
方向控制:WSAD
确定键:J
需求分析(UML类图)
UML类图是老师提供的,因为以我现在的能力还画不出逻辑这么清晰的UML类图!
补充知识点:
检测键盘是否激活
Console.KeyAvailable == true;
注意使用后会使程序变慢,具体为什么我还不得而知,后面慢慢的积累学习我想我会弄明白的。
开始前:
按照UML类图逐个去写逐个去实现(但是有些模块我没有用上)
主要精力是放在了功能实现上
下面是我实现的过程
一、万事开头难--游戏类
(我先确定了开始着手的地方--游戏类,因为它是所有类和方法的汇聚地)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//游戏类
namespace 自个先写CSharp核心小项目_贪吃蛇_
{
enum E_Scene
{
BeginID,
GamingID,
FinishID,
}
class Game
{
public static int x;
public static int y;
public static E_Scene scene = new E_Scene();
Begin begin = new Begin();
Finish finish = new Finish();
public Game()
{
x = 100;
y = 30;
scene = E_Scene.BeginID;
}
//初始化控制台
public void Consoles()
{
//隐藏光标
Console.CursorVisible = false;
//设置舞台大小
Console.SetWindowSize(x, y);
Console.SetBufferSize(x, y);
}
//游戏主循环
public void MajorCycle()
{
while (true)
{
//思考一下,为什么把开始场景和结束场景的类申明放在外面,而游戏场景的类申明放循环里面
//因为开始结束场景是一成不变的,只需申明一次就够用了
//而游戏场景进入一次就会执行出结果出来,每次结果都将不一样,所以每次都得重新申明
switch (scene)
{
case E_Scene.BeginID:
Console.Clear();
begin.newers();
break;
case E_Scene.GamingID:
Console.Clear();
GameScene gameScene = new GameScene();
gameScene.newers();
break;
case E_Scene.FinishID:
Console.Clear();
finish.newers();
break;
default:
break;
}
}
}
//场景切换
public void SceneMove()
{
}
}
}
二、游戏帧更新接口
1.更新接口
2.开始和结束场景基类
开始场景类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//开始场景
namespace 自个先写CSharp核心小项目_贪吃蛇_
{
class Begin : BeginAndFinish
{
public Begin()
{
str = "贪吃蛇";
str1 = "开始游戏";
str2 = "结束游戏";
}
//重写更新方法
public override void newers()
{
Console.SetCursorPosition(48, 10);
Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine