package com.android.snack;
import android.app.Activity;
import android.os.Bundle;
public class MainSnack extends Activity {
SnackView sv;
public voidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
sv = new SnackView(this, null);
setContentView(sv);
}
}
package com.android.snack;
public class SnackBody {
private int SnackX;
private int SnackY;
public int getSnackX() {
return SnackX;
}
public void setSnackX(int snackX) {
SnackX = snackX;
}
public int getSnackY() {
return SnackY;
}
public void setSnackY(int snackY) {
SnackY = snackY;
}
}
package com.android.snack;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.util.AttributeSet;
import android.view.KeyEvent;
import android.view.View;
public class SnackView extends View {
public static final int MAP_SIZE=20;//地图宽
public static final int MAP_H = 30;//地图长
public static final int GAME_PRE = 1;//游戏准备状态
public static final int GAME_RUN =2;//游戏运行状态
public static final int GAME_END = 3;//游戏结束状态
private intStartX;
private intStartY;//游戏地图的开始的坐标
private int mGameState = GAME_RUN;//当前游戏状态
private Paint mPaint;
private int SnackWidth;//蛇身的大小
private int FoodX;
private int FoodY;
private int move = 1;
private boolean start = true;
Random r= new Random();
List<SnackBody> list =new ArrayList<SnackBody>();
public SnackView(Context context, AttributeSet attrs) {
super(context, attrs);
this.setFocusable(true);
this.setFocusableInTouchMode(true);
// TODO Auto-generated constructor stub
}
public void init(){
FoodX = r.nextInt(19);
FoodY = r.nextInt(29);
int x = r.nextInt(19);
int y = r.nextInt(29);
SnackBody snackBody = new SnackBody();
snackBody.setSnackX(x);
snackBody.setSnackY(y);
list.add(snackBody);
new Thread(new ThreadRunnable()).start();
}
protected void onSizeChanged(int W,int H, int oldW,intoldH){
if(W/MAP_SIZE<H/MAP_H)
SnackWidth = W/MAP_SIZE;
else
SnackWidth = H/MAP_H;
StartX =(W-MAP_SIZE*SnackWidth)>>1;
StartY =(H-MAP_H*SnackWidth)>>1;
init();
}
public void onDraw(Canvas canvas){
canvas.drawColor(Color.GREEN);
//画地图边界
mPaint = new Paint();
mPaint.setStyle(Style.STROKE);
mPaint.setStrokeWidth(4);
mPaint.setColor(Color.BLACK);
canvas.drawRect(StartX, StartY, SnackWidth*MAP_SIZE+6,SnackWidth*MAP_H+6, mPaint);
//画食物
mPaint.setStyle(Style.FILL);
mPaint.setColor(Color.GRAY);
canvas.drawRect(FoodX*SnackWidth+StartX,FoodY*SnackWidth+StartY,FoodX*SnackWidth+StartX+SnackWidth,FoodY*SnackWidth+StartY+SnackWidth,mPaint);
//画蛇身
mPaint.setStyle(Style.FILL);
mPaint.setColor(Color.YELLOW);
for(int i =0;i<list.size();i++){
int left = list.get(i).getSnackX()*SnackWidth+StartX;
int top =list.get(i).getSnackY()*SnackWidth+StartY;
int right=list.get(i).getSnackX()*SnackWidth+StartX+SnackWidth;
int bottom =list.get(i).getSnackY()*SnackWidth+StartY+SnackWidth;
canvas.drawRect(left, top, right, bottom, mPaint);
}
}
public void eat(){
if(list.get(0).getSnackX()==FoodX&&list.get(0).getSnackY()==FoodY){
SnackBody snackBody = new SnackBody();
snackBody.setSnackX(list.get(list.size()-1).getSnackX());
snackBody.setSnackY(list.get(list.size()-1).getSnackY());
list.add(snackBody);
FoodX = r.nextInt(19);
FoodY = r.nextInt(29);
}
}
private void otherMove(){
SnackBody body = new SnackBody();
for(int i=0;i<list.size();i++){
if(i==1){
list.get(i).setSnackX(list.get(0).getSnackX());
list.get(i).setSnackY(list.get(0).getSnackY());
}else if(i>1){
body =list.get(i-1);
list.set(i-1, list.get(i));
list.set(i, body);
}
}
}
private void move(int x,int y){
if(dead(x,y)){
otherMove();
list.get(0).setSnackX(list.get(0).getSnackX()+x);
list.get(0).setSnackY(list.get(0).getSnackY()+y);
eat();}
else{
start = false;
}
}
public booleanonKeyDown(int keyCode, KeyEvent event){
if(keyCode==KeyEvent.KEYCODE_DPAD_DOWN){
move(0,1);
move =1;
}
if(keyCode ==KeyEvent.KEYCODE_DPAD_LEFT){
move(-1,0);
move =2;
}
if(keyCode==KeyEvent.KEYCODE_DPAD_RIGHT){
move(1,0);
move =3;
}
if(keyCode==KeyEvent.KEYCODE_DPAD_UP){
move(0,-1);
move = 4;
}
this.invalidate();
return super.onKeyDown(keyCode, event);
}
public boolean dead(intx,int y){
if((list.get(0).getSnackX()+x)<0||(list.get(0).getSnackX()+x)>18||
(list.get(0).getSnackY()+y)<0||(list.get(0).getSnackY()+y)>29){
return false;
}
return true;
}
public class ThreadRunnable implements Runnable{
public void run() {
while(start){
try{
switch(move){
case 1:move(0,1);
break;
case 2:move(-1,0);
break;
case 3:move(1,0);
break;
case 4:move(0,-1);
break;
}
Thread.sleep(1000);
}catch(Exception e){
}
postInvalidate();
}
}}
}
分享到:
相关推荐
《Android游戏贪吃蛇源码解析与学习指南》 贪吃蛇是一款经典的电子游戏,它简单易懂,却又富有挑战性。在Android平台上,贪吃蛇的实现涉及到许多编程技术,包括图形绘制、事件处理、游戏逻辑等。本文将深入探讨...
本文将深入探讨如何利用Android Studio和Java语言实现“android游戏贪吃蛇”的源代码。 首先,贪吃蛇游戏的核心概念是基于网格的二维空间,蛇在其中移动,吃食物并增长。游戏逻辑主要包括以下几个部分: 1. **游戏...
通过对这个"简单的贪吃蛇源码"的分析,我们可以了解到Android游戏开发的基本流程和技巧,这对于想要学习Android游戏开发的开发者来说是非常有价值的。通过实践这样的源码,不仅可以提高编程技能,还能深入理解游戏...
"基于 Android 的贪吃蛇游戏" 基于 Android 平台的贪吃蛇游戏开发是 Android 软件开发的经典案例,本文将详细介绍基于 Android 的贪吃蛇游戏开发的知识点。 知识点一: Android 软件开发环境 Android 软件开发...
【标题】"安卓贪吃蛇小游戏Android Studio实现"是一个基于Android Studio开发的项目,它旨在教授用户如何使用这个强大的集成开发环境(IDE)来创建一个经典的休闲游戏——贪吃蛇。这个项目对于初学者来说是一个很好...
【Android贪吃蛇游戏开发详解】 Android平台上的贪吃蛇游戏是一款经典的休闲娱乐应用,它利用设备的重力感应功能来控制游戏中的蛇移动。在本文中,我们将深入探讨这款"Android贪吃蛇(最终版)"的实现原理、关键...
通过本次实训,不仅掌握了Android游戏开发的基本技能,还学会了如何合理规划项目结构,有效管理和组织代码。同时,在解决实际问题的过程中,也锻炼了团队协作能力和问题解决能力。 #### 六、附件(所有程序的源代码...
本资源是基于Android移动应用开发,用Android studio实现的期末作业,贪吃蛇小游戏。功能比较少,玩家可通过相应功能按键实现小游戏运行,碰到墙壁游戏结束 所使用配置: 1. Android studio 2022 Electric Eel(2022....
【贪吃蛇】是一款经典的休闲游戏,源自早期的计算机游戏,如今在移动设备上得到了广泛的应用,尤其是在Android平台上。这个小项目是针对Android平台开发的一个贪吃蛇游戏的示例,旨在帮助开发者学习和理解Android...
《基于Android的贪吃蛇游戏app》是一款专为Android平台设计的经典游戏应用,它将我们熟知的贪吃蛇游戏融入到了移动设备中,为用户带来了便捷且趣味的娱乐体验。这款应用不仅具备了贪吃蛇游戏的所有基本功能,还可能...
android游戏_贪吃蛇,视频教程,教你轻松入门android游戏开发
【Android开发的贪吃蛇——课程设计详解】 贪吃蛇是一款经典的电子游戏,深受各年龄段玩家的喜爱。在Android平台上开发这款游戏,不仅可以帮助开发者巩固基础知识,还能提升对Android应用开发的理解和实践能力。本...
本文将详细解析"Android 贪吃蛇"程序代码源码,帮助你理解Android游戏开发的基本原理和技巧。 首先,我们要知道贪吃蛇游戏的基本逻辑:蛇在屏幕上移动,吃食物后增长,碰到边界或自身会死亡。这个过程涉及到了屏幕...
在Android平台上开发一款贪吃蛇游戏,涉及到许多关键的技术点,包括用户界面设计、游戏逻辑实现、事件处理以及性能优化等。以下是对"android贪吃蛇游戏源码"的详细解读: 1. **用户界面(UI)设计**: - 使用...
在Android平台上开发贪吃蛇游戏,不仅能够让玩家享受到经典游戏的乐趣,同时也为开发者提供了一个练习和展示编程技巧的机会。本知识点将围绕基于Android平台的贪吃蛇游戏设计与开发展开,详细探讨游戏的实现机制,...
【Android贪吃蛇游戏源码】是一个非常适合初学者和进阶者学习的Android开发资源,它提供了实现经典游戏“贪吃蛇”的完整代码。通过分析和理解这个源码,你可以深入学习Android应用开发的基本概念、游戏逻辑以及UI...
《Android 贪吃蛇游戏源代码解析与学习指南》 贪吃蛇游戏,作为一款经典的游戏,无论是在PC还是移动设备上,都深受玩家喜爱。Android平台上的贪吃蛇游戏,更是为开发者提供了一个良好的实践平台,让我们可以通过源...
在Android平台上开发一款贪吃蛇小游戏,涉及到许多关键的编程概念和技术。首先,我们要了解贪吃蛇游戏的基本机制:玩家控制一个由多个方块组成的蛇,通过移动来吃食物,每吃一个食物,蛇的长度就会增加,同时游戏...
《我的Android贪吃蛇游戏》是一款由个人开发者独立完成的移动平台游戏,旨在提升开发者自身的动手能力和巩固课堂所学的编程知识。贪吃蛇游戏,作为经典的休闲游戏,深受各年龄段玩家的喜爱,其简单易懂的规则和无尽...