【发布时间】:2018-08-25 01:44:07
【问题描述】:
我正在尝试学习如何在主机游戏中保存和加载。目前我正在尝试从文件中加载蛇的位置。蛇是一个列表,其中包含每个元素的 X 和 Y 坐标。
我遇到的问题是蛇没有从注册位置加载。我想问题出在读数上。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.IO;
namespace MySnake
{
struct Position
{
public int Row;
public int Col;
public Position(int row, int col)
{
this.Row = row;
this.Col = col;
}
}
class Program
{
static void Main()
{
byte right = 0;
byte left = 1;
byte down = 2;
byte up = 3;
Position[] directions =
{
new Position(0,1), // right
new Position(0,-1), // left
new Position(1,0), // down
new Position(-1,0), // up
};
int direction = 0;
Console.SetBufferSize(100, 100);
Console.SetWindowSize(Console.BufferWidth, Console.BufferHeight);
List<Position> snake = new List<Position>();
for (int i = 0; i < 6; i++)
{
snake.Add(new Position(0, 1));
}
Draw(snake,"*");
while (true)
{
if (Console.KeyAvailable)
{
ConsoleKeyInfo userImput = Console.ReadKey();
if (userImput.Key == ConsoleKey.LeftArrow)
{
if (direction != right)
{
direction = 1;
}
}
if (userImput.Key == ConsoleKey.RightArrow)
{
if (direction != left)
{
direction = 0;
}
}
if (userImput.Key == ConsoleKey.UpArrow)
{
if (direction != down)
{
direction = 3;
}
}
if (userImput.Key == ConsoleKey.DownArrow)
{
if (direction != up)
{
direction = 2;
}
}
if (userImput.Key == ConsoleKey.S)
{
SaveGame(snake);
}
if (userImput.Key == ConsoleKey.L)
{
LoadGame(snake);
}
}
Position snakeHead = snake.Last();
Position snakeNewHead = new Position(snakeHead.Row + directions[direction].Row, snakeHead.Col + directions[direction].Col);
snake.Add(snakeNewHead);
Draw(snakeNewHead,"*");
Console.SetCursorPosition(snake[0].Col, snake[0].Row);
Console.Write(' ');
snake.RemoveAt(0); // take off at the back!!
Thread.Sleep(100);//100ms
}
}
private static void Draw(List<Position> smth,string str)
{
foreach (var position in smth)
{
Console.SetCursorPosition(position.Col, position.Row);
Console.Write(str);
}
}
private static void Draw(Position smth,string str)
{
Console.SetCursorPosition(smth.Col, smth.Row);
Console.Write(str);
}
private static void LoadGame(List<Position> snake)
{
int snakeCount = snake.Count;
snake.Clear();
StreamReader reader = new StreamReader("savegame.jcn");
using (reader)
{
for (int i = 0; i < snakeCount; i++)
{
string[] text = reader.ReadLine().Split(' ');
snake.Add(new Position(int.Parse(text[0]), int.Parse(text[1])));
}
}
}
private static void SaveGame(List<Position>snake)
{
StreamWriter writer = new StreamWriter("savegame.jcn");
using (writer)
{
foreach (var element in snake)
{
writer.WriteLine(element.Col + " " + element.Row);
}
}
}
}
}
提前感谢您的帮助!
【问题讨论】:
-
嗨,朱利安。请阅读如何创建minimal reproducible example 和edit 您的问题以包含我们可以运行的内容,以便我们可以看到相同的问题。这也是学习使用调试器的好时机,它可以让您一次单步执行程序并查看到底发生了什么。
-
你也可以看看静态的
File方法(using System.IO),你可以用它来读写文本文件(它们比使用 StreamReader/Writers 更容易,因为它们可以换行大部分功能都集成到File.ReadAllLines或File.WriteAllLines等方法中。 -
感谢您的建议。我是新来的,所以我不知道它是如何工作的。我从代码中删除了所有不必要的人员。