`
wo_deqing
  • 浏览: 64160 次
文章分类
社区版块
存档分类
最新评论

Android游戏 贪吃蛇

 
阅读更多
Android游戏<wbr>贪吃蛇

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平台上,贪吃蛇的实现涉及到许多编程技术,包括图形绘制、事件处理、游戏逻辑等。本文将深入探讨...

    android游戏贪吃蛇

    本文将深入探讨如何利用Android Studio和Java语言实现“android游戏贪吃蛇”的源代码。 首先,贪吃蛇游戏的核心概念是基于网格的二维空间,蛇在其中移动,吃食物并增长。游戏逻辑主要包括以下几个部分: 1. **游戏...

    [Android游戏源码]-简单的贪吃蛇源码.rar_Android游戏源码_android_android 贪吃蛇_贪吃蛇_贪

    通过对这个"简单的贪吃蛇源码"的分析,我们可以了解到Android游戏开发的基本流程和技巧,这对于想要学习Android游戏开发的开发者来说是非常有价值的。通过实践这样的源码,不仅可以提高编程技能,还能深入理解游戏...

    基于Android的贪吃蛇游戏.doc

    "基于 Android 的贪吃蛇游戏" 基于 Android 平台的贪吃蛇游戏开发是 Android 软件开发的经典案例,本文将详细介绍基于 Android 的贪吃蛇游戏开发的知识点。 知识点一: Android 软件开发环境 Android 软件开发...

    安卓贪吃蛇小游戏AndroidStudio实现

    【标题】"安卓贪吃蛇小游戏Android Studio实现"是一个基于Android Studio开发的项目,它旨在教授用户如何使用这个强大的集成开发环境(IDE)来创建一个经典的休闲游戏——贪吃蛇。这个项目对于初学者来说是一个很好...

    Android贪吃蛇(最终版)

    【Android贪吃蛇游戏开发详解】 Android平台上的贪吃蛇游戏是一款经典的休闲娱乐应用,它利用设备的重力感应功能来控制游戏中的蛇移动。在本文中,我们将深入探讨这款"Android贪吃蛇(最终版)"的实现原理、关键...

    基于Android的贪吃蛇游戏开发

    通过本次实训,不仅掌握了Android游戏开发的基本技能,还学会了如何合理规划项目结构,有效管理和组织代码。同时,在解决实际问题的过程中,也锻炼了团队协作能力和问题解决能力。 #### 六、附件(所有程序的源代码...

    Android移动应用开发 贪吃蛇小游戏

    本资源是基于Android移动应用开发,用Android studio实现的期末作业,贪吃蛇小游戏。功能比较少,玩家可通过相应功能按键实现小游戏运行,碰到墙壁游戏结束 所使用配置: 1. Android studio 2022 Electric Eel(2022....

    贪吃蛇_android贪吃蛇_android_android小游戏_

    【贪吃蛇】是一款经典的休闲游戏,源自早期的计算机游戏,如今在移动设备上得到了广泛的应用,尤其是在Android平台上。这个小项目是针对Android平台开发的一个贪吃蛇游戏的示例,旨在帮助开发者学习和理解Android...

    基于Android的贪吃蛇游戏app

    《基于Android的贪吃蛇游戏app》是一款专为Android平台设计的经典游戏应用,它将我们熟知的贪吃蛇游戏融入到了移动设备中,为用户带来了便捷且趣味的娱乐体验。这款应用不仅具备了贪吃蛇游戏的所有基本功能,还可能...

    android游戏-贪吃蛇-视频

    android游戏_贪吃蛇,视频教程,教你轻松入门android游戏开发

    Android开发的贪吃蛇(专门用于课程设计)

    【Android开发的贪吃蛇——课程设计详解】 贪吃蛇是一款经典的电子游戏,深受各年龄段玩家的喜爱。在Android平台上开发这款游戏,不仅可以帮助开发者巩固基础知识,还能提升对Android应用开发的理解和实践能力。本...

    Android 贪吃蛇 程序代码源码

    本文将详细解析"Android 贪吃蛇"程序代码源码,帮助你理解Android游戏开发的基本原理和技巧。 首先,我们要知道贪吃蛇游戏的基本逻辑:蛇在屏幕上移动,吃食物后增长,碰到边界或自身会死亡。这个过程涉及到了屏幕...

    android贪吃蛇游戏源码

    在Android平台上开发一款贪吃蛇游戏,涉及到许多关键的技术点,包括用户界面设计、游戏逻辑实现、事件处理以及性能优化等。以下是对"android贪吃蛇游戏源码"的详细解读: 1. **用户界面(UI)设计**: - 使用...

    基于android的贪吃蛇游戏设计与开发.pdf

    在Android平台上开发贪吃蛇游戏,不仅能够让玩家享受到经典游戏的乐趣,同时也为开发者提供了一个练习和展示编程技巧的机会。本知识点将围绕基于Android平台的贪吃蛇游戏设计与开发展开,详细探讨游戏的实现机制,...

    Android贪吃蛇游戏源码

    【Android贪吃蛇游戏源码】是一个非常适合初学者和进阶者学习的Android开发资源,它提供了实现经典游戏“贪吃蛇”的完整代码。通过分析和理解这个源码,你可以深入学习Android应用开发的基本概念、游戏逻辑以及UI...

    Android 贪吃蛇游戏源代码

    《Android 贪吃蛇游戏源代码解析与学习指南》 贪吃蛇游戏,作为一款经典的游戏,无论是在PC还是移动设备上,都深受玩家喜爱。Android平台上的贪吃蛇游戏,更是为开发者提供了一个良好的实践平台,让我们可以通过源...

    android 贪吃蛇小游戏

    在Android平台上开发一款贪吃蛇小游戏,涉及到许多关键的编程概念和技术。首先,我们要了解贪吃蛇游戏的基本机制:玩家控制一个由多个方块组成的蛇,通过移动来吃食物,每吃一个食物,蛇的长度就会增加,同时游戏...

    我的Android贪吃蛇游戏

    《我的Android贪吃蛇游戏》是一款由个人开发者独立完成的移动平台游戏,旨在提升开发者自身的动手能力和巩固课堂所学的编程知识。贪吃蛇游戏,作为经典的休闲游戏,深受各年龄段玩家的喜爱,其简单易懂的规则和无尽...

Global site tag (gtag.js) - Google Analytics