电脑自己做一个贪吃蛇app

贪吃蛇是一款经典的小游戏,是许多人童年的回忆。本文将介绍如何用电脑自己做一个贪吃蛇App。

开发工具和语言

首先要选择一款适合自己的开发工具和编程语言。目前比较流行的开发工具有Android Studio、Xcode等,编程语言则可以选择Java、Kotlin、Swift等。

界面设计

贪吃蛇App的界面应该是简单明了的,包含开始界面、游戏界面、结束界面等。开始界面应该有开始游戏按钮和游戏规则介绍,游戏界面应该有蛇体、食物、得分等元素,结束界面应该有得分、重新开始和返回主界面等选项。

游戏逻辑

蛇的移动方向应该由玩家控制,当蛇头碰到游戏界面的边界或者蛇尾时,游戏结束。当蛇头吃到食物时,蛇的长度增加一节,游戏得分也会增加。食物应该随机生成,并且不能与蛇体重叠。

代码实现

以下是用Java语言实现的贪吃蛇App代码:

1. 定义Snake类

public class Snake {

private LinkedList body;//蛇的身体,LinkedList是Java中的一种队列数据结构

public Snake() {

body = new LinkedList();//蛇初始化时只有一节身体

body.add(new Node(5, 5));//蛇的初始位置

}

public LinkedList getBody() {

return body;

}

public boolean eatFood(Node food) {//判断蛇是否吃到了食物

Node head = body.getFirst();

if (head.getX() == food.getX() && head.getY() == food.getY()) {

body.addFirst(food);//蛇的头部添加一节身体

return true;

}

return false;

}

public void move(int direction) {//蛇的移动

Node head = body.getFirst();

int x = head.getX();

int y = head.getY();

switch (direction) {

case MainActivity.UP:

y--;

break;

case MainActivity.DOWN:

y++;

break;

case MainActivity.LEFT:

x--;

break;

case MainActivity.RIGHT:

x++;

break;

}

Node newHead = new Node(x, y);

body.addFirst(newHead);//加入新的头部

body.removeLast();//移除尾部

}

public boolean isDead() {//判断蛇是否死亡

Node head = body.getFirst();

if (head.getX() < 0 || head.getX() >= MainActivity.COL_NUM) {//超出界限

return true;

}

if (head.getY() < 0 || head.getY() >= MainActivity.ROW_NUM) {//超出界限

return true;

}

for (int i = 1; i < body.size(); i++) {//与身体相撞

if (head.getX() == body.get(i).getX() && head.getY() == body.get(i).getY()) {

return true;

}

}

return false;

}

}

2. 定义Node类

public class Node {

private int x;

private int y;

public Node(int x, int y) {

this.x = x;

this.y = y;

}

public int getX() {

return x;

}

public int getY() {

return y;

}

}

3. 定义Food类

public class Food {

private Node food;

public Food() {

food = new Node(0, 0);//初始化位置

}

public Node genNewFood(LinkedList body) {//生成新的食物

boolean isOverlap = true;//判断是否与蛇体重叠

while (isOverlap) {

int x = (int) (Math.random() * MainActivity.COL_NUM);

int y = (int) (Math.random() * MainActivity.ROW_NUM);

Node newFood = new Node(x, y);

isOverlap = false;

for (int i = 0; i < body.size(); i++) {

if (newFood.getX() == body.get(i).getX() && newFood.getY() == body.get(i).getY()) {

isOverlap = true;

break;

}

}

if (!isOverlap) {

food = newFood;

}

}

return food;

}

}

4. 定义MainActivity类

public class MainActivity extends AppCompatActivity {

public static final int COL_NUM = 15;//游戏界面的列数

public static final int ROW_NUM = 20;//游戏界面的行数

public static final int UP = 0;//方向,用常量表示方便修改

public static final int DOWN = 1;

public static final int LEFT = 2;

public static final int RIGHT = 3;

private Snake snake;

private Food food;

private boolean isRunning = true;//控制游戏是否运行

private int direction = RIGHT;//初始方向为向右

private int score = 0;//得分

private Handler handler = new Handler();//用于UI更新

private Runnable runnable = new Runnable() {

@Override

public void run() {

if (isRunning) {

snake.move(direction);//蛇移动

if (snake.eatFood(food.genNewFood(snake.getBody()))) {//吃到了食物

score++;

}

if (snake.isDead()) {//蛇死亡

isRunning = false;

AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);

builder.setTitle("游戏结束");

builder.setMessage("得分:" + score);

builder.setPositiveButton("重新开始", new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

restartGame();

}

});

builder.setNegativeButton("返回主界面", new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

finish();

}

});

builder.setCancelable(false);

builder.show();

return;

}

handler.postDelayed(this, 500);//每500毫秒刷新界面

drawGameView();

}

}

};

private GameView gameView;

private Button startButton;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

gameView = (GameView) findViewById(R.id.game_view);

startButton = (Button) findViewById(R.id.start_button);

startButton.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

startGame();

}

});

snake = new Snake();

food = new Food();

}

private void startGame() {//开始游戏

startButton.setVisibility(View.GONE);//隐藏开始按钮

score = 0;//分数清零

isRunning = true;//游戏开始

direction = RIGHT;//方向重置为向右

handler.postDelayed(runnable, 500);

}

private void restartGame() {//重新开始游戏

startButton.setVisibility(View.VISIBLE);//显示开始按钮

snake = new Snake();//重新创建蛇和食物实例

food = new Food();

gameView.invalidate();//界面重绘

}

private void drawGameView() {//绘制游戏界面

gameView.invalidate();//界面重绘

}

public int getScore() {

return score;

}

public Snake getSnake() {

return snake;

}

public Food getFood() {

return food;

}

public int getDirection() {

return direction;

}

public void setDirection(int direction) {

this.direction = direction;

}

}

5. 定义GameView类

public class GameView extends View {

private MainActivity context;

private Paint paint;

public GameView(Context context, AttributeSet attrs) {

super(context, attrs);

this.context = (MainActivity) context;

paint = new Paint();//绘图工具

paint.setAntiAlias(true);//设置抗锯齿

}

@Override

protected void onDraw(Canvas canvas) {//重写绘制方法

super.onDraw(canvas);

int cellWidth = getWidth() / MainActivity.COL_NUM;//列宽

int cellHeight = getHeight() / MainActivity.ROW_NUM;//行高

drawSnake(cellWidth, cellHeight, canvas);//绘制蛇

drawFood(cellWidth, cellHeight, canvas);//绘制食物

drawScore(canvas);//绘制分数

}

private void drawSnake(int cellWidth, int cellHeight, Canvas canvas) {//绘制蛇

Snake snake = context.getSnake();

LinkedList body = snake.getBody();

paint.setColor(Color.GREEN);

for (int i = 0; i < body.size(); i++) {

int x = body.get(i).getX() * cellWidth;

int y = body.get(i).getY() * cellHeight;

canvas.drawRect(x, y, x + cellWidth, y + cellHeight, paint);

}

}

private void drawFood(int cellWidth, int cellHeight, Canvas canvas) {//绘制食物

Node food = context.getFood().getFood();

paint.setColor(Color.RED);

int x = food.getX() * cellWidth;

int y = food.getY() * cellHeight;

canvas.drawRect(x, y, x + cellWidth, y + cellHeight, paint);

}

private void drawScore(Canvas canvas) {//绘制分数

paint.setColor(Color.BLACK);

paint.setTextSize(30);

int score = context.getScore();

String scoreText = "得分:" + score;

canvas.drawText(scoreText, 10, 30, paint);

}

}

以上就是用Java语言实现的贪吃蛇App的代码,当然你也可以用其他语言和工具完成这个小项目。希望这篇文章能够对有志于开发自己的应用的初学者们有所帮助。


相关知识:
做一个自己用的app大概需要多少钱
做一个自己用的app,并不需要很多钱。但是,具体的花费取决于您需要开发的应用程序的具体细节。以下是您可能需要考虑的几个方面:1. 应用程序类型: 不同类型的应用程序开发成本也不同。比如,一个简单的查询天气预报的app,相对于一个需要大量复杂算法支持的游戏a
2023-06-05
自己打工做生意 要用app扣税吗
在现代社会,越来越多的人选择自己打工或做生意,这样既可以自由支配自己的时间,又可以获得更高的收入。但是,在个人打工或做生意的过程中,如何扣税成为了一个重要的问题。而现在,使用app扣税已经成为了一种趋势。接下来,我将介绍使用app扣税的原理和详细介绍。一、
2023-06-05
自动帮助apple和应用开发者
苹果公司作为一家领先的科技公司,致力于开发和推广创新的技术和产品。该公司拥有庞大的应用程序商店,提供丰富多彩的应用程序。作为苹果公司软件和应用程序开发的一部分,开发者可以充分利用苹果公司提供的工具和SDK(软件开发工具包)来创建和发布iOS应用。自动化是苹
2023-06-05
制作自编公式的app
要制作一个自编公式的App,需要具备一定的编程和数学基础,下面是详细的介绍和原理。首先,要了解App的基本组成部分。一个App通常包含三个主要组件:前端(用户界面)、后端(数据存储、逻辑计算)、服务端(提供网络服务)。自编公式的App应具备以下特点:1.用
2023-06-05
怎么自己做一个跑腿的app
做一个跑腿的app需要考虑很多因素,比如商业模式、用户体验、技术实现、安全等方面。下面本文将从这些方面来详细介绍做跑腿app的原理。1. 商业模式跑腿app的商业模式一般是基于信息平台,让用户发布需要跑腿的任务,由后台系统挑选最适合的跑腿人员去完成任务。跑
2023-06-05
怎么制作一款自己的商业app方案
现在,移动互联网的发展非常迅速。无论是使用智能手机还是平板电脑,都可以随时随地访问互联网。出于这个原因,很多企业发现了移动互联网的重要性并已经开始了开发自己的商业移动应用程序。如果你也想制作一款自己的商业app,下面是一份详细的方案介绍。1.需求分析第一步
2023-06-05
手机app开发自适应布局
随着移动设备的普及,手机上的应用程序成为人们日常生活中不可或缺的一部分。因此,针对不同的屏幕大小和设备类型实现自适应布局,是应用程序开发的一个重要问题。今天我们将介绍一些实现自适应布局的常见方法。1.使用百分比来设置布局设置宽度和高度的百分比是一种非常简单
2023-05-31
如何自己制作app界面
现如今,手机已经成为我们生活中必不可少的一部分,而在手机上使用App也是我们日常生活最频繁的事情之一。但是你有没有想过,那些好看、方便、易用的App是如何制作出来的?在制作App时,设计好的界面也是至关重要的。一个好看、直观、易用的界面能够吸引用户,提升用
2023-05-30
可以自己做动画的app
随着互联网技术的不断发展,自主制作动画成为了一个越来越热门的话题。然而,许多人却发现自己缺乏专业的技能来完成这项任务。今天,我们将介绍一些可以帮助人们轻松制作动画的应用程序。首先,我们来介绍一些流行的基于云端服务的动画制作工具:1. AnimakerAni
2023-05-30
开发属于自己的app是必备的
在当今数字化时代,移动应用程序成为了人们生活中不可或缺的一部分。App可以让我们更方便的获取信息,连接朋友,购物等等。因此,开发属于自己的App已成为了许多人越来越感兴趣的事情。本文分为以下几个部分,分别介绍开发属于自己的App的必要性以及相关原理。一、开
2023-05-30
记录每天自己做了什么的app
随着移动设备的普及,APP正在成为人们越来越重要的生活工具。日程管理、健康管理、论坛社交、游戏娱乐、工具管理等各式各样的应用程序都已经涵盖了日常所有的需求。其中,记录每天自己的行为与时间的APP对于许多人来说是非常重要的,因为他们需要追述自己的工作、学习和
2023-05-30
app体验官怎么自己做
App体验官是一种通过测试应用程序并提供反馈意见的职业。在这个角色中,你将必须通过使用应用程序识别和报告错误、测试用户界面和功能以及执行各种其他操作,来确保应用程序的最佳性能和用户体验。如果你想成为一名app体验官,可以参考下面的步骤:第一步:了解应用程序
2023-05-30
©2015-2021 自建app开发平台 www.appbyme.cn 蜀ICP备17005078号-1