[Swift]LeetCode353. 设计贪吃蛇游戏 $ Design Snake Game

Design a Snake game that is played on a device with screen size = width x height. Play the game online if you are not familiar with the game.

The snake is initially positioned at the top left corner (0,0) with length = 1 unit.

You are given a list of food‘s positions in row-column order. When a snake eats the food, its length and the game‘s score both increase by 1.

Each food appears one by one on the screen. For example, the second food will not appear until the first food was eaten by the snake.

When a food does appear on the screen, it is guaranteed that it will not appear on a block occupied by the snake.

Example:

Given width = 3, height = 2, and food = [[1,2],[0,1]].

Snake snake = new Snake(width, height, food);

Initially the snake appears at position (0,0) and the food at (1,2).

|S| | |
| | |F|

snake.move("R"); -> Returns 0

| |S| |
| | |F|

snake.move("D"); -> Returns 0

| | | |
| |S|F|

snake.move("R"); -> Returns 1 (Snake eats the first food and right after that, the second food appears at (0,1) )

| |F| |
| |S|S|

snake.move("U"); -> Returns 1

| |F|S|
| | |S|

snake.move("L"); -> Returns 2 (Snake eats the second food)

| |S|S|
| | |S|

snake.move("U"); -> Returns -1 (Game over because snake collides with border)

Credits:
Special thanks to @elmirap for adding this problem and creating all test cases.



设计一个在屏幕大小=宽x高的设备上玩的蛇游戏。如果您不熟悉游戏,请在线玩游戏。

蛇最初位于左上角(0,0),长度=1单位。

你会得到一份食物位置列表,按行、列顺序排列。当蛇吃了食物,它的长度和游戏的得分都增加了1。

每种食物一个一个地出现在屏幕上。例如,第二种食物在第一种食物被蛇吃之前不会出现。

当一种食物出现在屏幕上时,它保证不会出现在被蛇占据的街区上。

例子:

给定width = 3, height = 2, and food = [[1,2],[0,1]].

Snake snake = new Snake(width, height, food);

最初snake出现在位置(0,0),food出现在位置(1,2)。

|S| | |
| | |F|

snake.move("R"); -> Returns 0

| |S| |
| | |F|

snake.move("D"); -> Returns 0

| | | |
| |S|F|

snake.move("R"); -> Returns 1 (snake吃第一种食物,之后第二种食物出现在(0,1))。

| |F| |
| |S|S|

snake.move("U"); -> Returns 1

| |F|S|
| | |S|

snake.move("L"); -> Returns 2 (snake吃第二种食物)
| |S|S|
| | |S|

snake.move("U"); -> Returns -1 (游戏结束,因为snake与边界碰撞)

Credits:
特别感谢@elmirap添加此问题并创建所有测试用例。



Solution:

 1 class Snake {
 2     /** Initialize your data structure here.
 3         @param width - screen width
 4         @param height - screen height
 5         @param food - A list of food positions
 6         E.g food = [[1,1], [1,0]] means the first food is positioned at [1,1], the second is at [1,0]. */
 7
 8     var width:Int
 9     var height:Int
10     var score:Int
11     var food:[[Int]]
12     var snake:[[Int]]
13
14     init(_ width:Int,_ height:Int,_ food:[[Int]])
15     {
16         self.width = width
17         self.height = height
18         self.food = food
19         self.score = 0
20         self.snake = [[0,0]]
21     }
22
23         /** Moves the snake.
24         @param direction - ‘U‘ = Up, ‘L‘ = Left, ‘R‘ = Right, ‘D‘ = Down
25         @return The game‘s score after the move. Return -1 if game over.
26         Game over when snake crosses the screen boundary or bites its body. */
27
28     func move(_ direction:String) -> Int
29     {
30         var head:[Int] = snake.first!
31         var tail:[Int] = snake.last!
32         snake.removeLast()
33         if direction == "U" { head[0] -= 1}
34         else if direction == "L" { head[1] -= 1}
35         else if direction == "R" { head[1] += 1}
36         else if direction == "D" { head[0] += 1}
37         if snake.contains(head) || head[0] < 0 || head[0] >= height || head[1] < 0 || head[1] >= width
38         {
39             return -1
40         }
41         snake.insert(head,at:0)
42         if !food.isEmpty && head == food.first!
43         {
44             food.removeFirst()
45             snake.append(tail)
46             score += 1
47         }
48         return score
49     }
50 }

点击:Playground测试

 1 let width:Int = 3
 2 let height:Int = 2
 3 let food:[[Int]] = [[1,2],[0,1]]
 4 var snake = Snake(width, height, food)
 5
 6 //snake.move("R"); -> Returns 0
 7 print(snake.move("R"))
 8 //Print 0
 9
10 //snake.move("D"); -> Returns 0
11 print(snake.move("D"))
12 //Print 0
13
14 //snake.move("R"); -> Returns 1
15 print(snake.move("R"))
16 //Print 1
17
18 //snake.move("U"); -> Returns 1
19 print(snake.move("U"))
20 //Print 1
21
22 //snake.move("L"); -> Returns 2
23 print(snake.move("L"))
24 //Print 2
25
26 //snake.move("U"); -> Returns -1
27 print(snake.move("U"))
28 //Print -1

原文地址:https://www.cnblogs.com/strengthen/p/10741729.html

时间: 2024-10-01 02:49:46

[Swift]LeetCode353. 设计贪吃蛇游戏 $ Design Snake Game的相关文章

[LeetCode] Design Snake Game 设计贪吃蛇游戏

Design a Snake game that is played on a device with screen size = width x height. Play the game online if you are not familiar with the game. The snake is initially positioned at the top left corner (0,0) with length = 1 unit. You are given a list of

qtday03 简单版的贪吃蛇游戏

//snakegame.h #ifndef SNAKEGAME_H #define SNAKEGAME_H #include<QList> #include<QtWidgets/QLabel> #include<QtWidgets/QDialog> #include<QKeyEvent> #include<QTimer> /*枚举,表示方向*/ enum Direction{D_UP,D_DOWN,D_LEFT,D_RIGHT}; class S

【视频】半小时内编写一个贪吃蛇游戏

贪吃蛇编写提纲 致谢: 感谢 Ronnie Mooney ,我是在学习了他的视频后完成这个视频的,你可以在 [C#] Creating a Snake Game - Less than an Hour 找到他的视频(需翻墙,请自备梯子). 编写 Input 静态类 初始化静态变量 private static readonly Hashtable _keys = new Hashtable() 编写方法 public static void ChangeState(Keys key, bool

手起刀落-一起来写经典的贪吃蛇游戏

回味 小时候玩的经典贪吃蛇游戏我们印象仍然深刻,谋划了几天,小时候喜欢玩的游戏,长大了终于有能力把他做出来(从来都没有通关过,不知道自己写的程序,是不是能通关了...),好了,闲话不多谈,先来看一下效果吧!! 功能和小时候玩的贪吃蛇一样, 1.选择速度 slow normal fast 2.选择是否有墙作为障碍物 on off 看完效果就先附上地址喽:大山深处修炼的小龙虾,欢迎fork. 结构分解 如果构建一个简单的经典贪吃蛇游戏呢?我们根据面板可以分解出如下结构: 因为其他面板比较简单,我们重

用Java开发贪吃蛇游戏

贪吃蛇游戏的设计步骤: Part 1: 设计游戏图纸 画出900*700的白色窗口 在窗口上添加画布 在画布上添加标题 在画布上添加黑色游戏区 Part 2: 放置静态的蛇:一个头.两个身体 加上开始提示:按空格键开始游戏 让蛇动起来:监听Timer事件,平移数据 实现游戏暂停 实现转向功能 Part 3: 添加食物 吃掉食物 添加死亡条件 实现“重新开始”功能 添加分数和长度 游戏图纸如下: 蛇及游戏框的素材如下:                              Snake主类: 1

Qt版贪吃蛇游戏

Qt版贪吃蛇游戏 转载请标明出处:牟尼的专栏 http://blog.csdn.net/u012027907 最近在学习Qt,用了一个多月的时间掌握了Qt中最基本的知识,也完成了<Qt版音乐播放器>.<Qt版贪吃蛇游戏>.<Qt版双人俄罗斯方块>以及<Qt版科学计算器>等,之前在VC下写过这些程序,所以在Qt下只是改变了显示等语句,我写过<C++版贪吃蛇游戏>.<VC版贪吃蛇游戏>,当时将与显示等无关的东西封装起来,在Qt下直接用,只

WebGL实现HTML5的3D贪吃蛇游戏

js1k.com收集了小于1k的javascript小例子,里面有很多很炫很酷的游戏和特效,今年规则又增加了新花样,传统的classic类型基础上又增加了WebGL类型,以及允许增加到2K的++类型,多次想尝试提交个小游戏但总无法写出让自己满意还能控制在这么小的字节范围. 自己写不出来,站在巨人肩膀总是有机会吧,想起<基于HTML5的电信网管3D机房监控应用>这篇提到的threejs,babylonjs和Hightopo的几种基于WebGL的3D引擎,突然想挑战下自己实现个100行JS的3D小

基于控制台实现贪吃蛇游戏

1).引言 学习编程,我个人觉得最好的办法就是根据自己的水平不断的给自己设定一个小目标.而这个小目标就是一个有意思的项目,通过完成这个项目,对自己的成果(也包括失败的)进行分析总结,从中提炼出对应的技术并分享出来,不断的往复,如此,为的就是让我们永远保持编写程序的兴趣和热情,完了,还提高我们的技术.而本文就是总结自己的一个小目标(基于控制台实现的贪吃蛇游戏而写的总结) 2).技术实现 大家小时候一定玩过贪吃蛇的游戏.贪吃蛇游戏的控制过程其实也不复杂.简单的可以概括为以下4个部分. 1.1  .组

Java 开发简单的贪吃蛇游戏

public class Test { public static void main(String[] args) { Game game = new Game(); game.start(); } } public class Node { private int x ; private int y ; public Node(){} public Node(int x , int y){ this.x = x ; this.y = y ; } public int getX() { ret