java小游戏开发,完整版 (初学者正在努力中)
2016-12-21 09:29
323 查看
在公司学习当中,按照任务写了小小游戏,但是不是我的最终想实现的能容,功能也没有完全达到我的要求,由于别的事情,目前不能继续做了,所以只能提前发出来,希望对大家有帮助。。。。。。
package com.example.amu;
public class ScoreThread extends Thread {
}
/**
*/
package com.example.amu;
import java.security.PublicKey;
import java.util.Timer;
import java.util.TimerTask;
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.os.Handler;
import android.os.Message;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
public class GameView extends SurfaceView implements SurfaceHolder.Callback {
}
package com.example.amu;
import android.graphics.Canvas;
import android.view.SurfaceHolder;
public class GameViewDrawThread extends Thread{
boolean flag = true;
int sleepSpan = 100;
GameView gameView;
SurfaceHolder surfaceHolder;
public GameViewDrawThread(GameView gameView){
this.gameView = gameView;
this.surfaceHolder = gameView.getHolder();
}
public void run(){
Canvas c;
while (this.flag) {
c = null;
try {
// 锁定整个画布,在内存要求比较高的情况下,建议参数不要为null
c = this.surfaceHolder.lockCanvas(null);
}(<a href="http://www.dztcsd.com/">资质代办</a>)
package com.example.amu;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageView;
public class MainActivity extends Activity {
}
package com.example.amu;
public class ScoreThread extends Thread {
}
作者: 哈哈哈_3
来源:慕课网
本文原创发布于慕课网 ,转载请注明出处,谢谢合作!
package com.example.amu;
public class ScoreThread extends Thread {
GameView gameView;//GameView 的引用 int highest=60; //胜利值,游戏的最高得分 public boolean flag=true; //线程释放执行的标志位 public ScoreThread(GameView gameView) { //构造器 this.gameView=gameView; // TODO Auto-generated constructor stub } public void run() { while(flag){ //gameView.score++;//得分增加 if(gameView.score==highest){ //判断时间是否达到胜利时间 gameView.status=3; //游戏胜利 //gameView.scoreThread.stop(); gameView.scoreThread.flag=false; //停止TimeThread执行 gameView.coinThread.flag=false; //停止coinThread执行 } try { Thread.sleep(1000); //休眠1S } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
}
/**
*/
package com.example.amu;
import java.security.PublicKey;
import java.util.Timer;
import java.util.TimerTask;
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.os.Handler;
import android.os.Message;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
public class GameView extends SurfaceView implements SurfaceHolder.Callback {
public static int run_flag = 0; //硬币运动的标志位,等于0时运动 /*声明该项目开发过程中用到的变量*/ MainActivity mainActivity; //activity 的引用 ScoreThread scoreThread; //TimeThread的引用 CoinGoThread coinThread; //CoinGoThread的引用 int screenWidth=480; //屏幕宽 int screenHeight=700;//屏幕高 int carWidth=40; //负责接硬币的小车的宽 int carHeight=10;//负责接硬币的小车的高 int bottomSpance=20;//低下空白 //int coinSize=16; int carSpan=5; //小车步进 int coinSpan=8; //硬币步进 int coinSize=16;//硬币的尺寸 int hintWidth=100;//提示宽度 int hintHeight=20;//提示高度 /*记录游戏的状态变量 0->等待开始,1->进行中,2->游戏结束,3->游戏胜利*/ int status=0; int score=0;//得分 int coinx;//硬币的X坐标 int coiny;//硬币的Y坐标 int carx;//负责接硬币的小车的X坐标 int cary;//负责接硬币的小车的Y坐标 int richManX;//土豪的X坐标 int richManY; //土豪的Y坐标 int richManSpan=5; //土豪的移动速度 int richManWidth=20; //土豪的宽度 int richManHeight=20; //土豪的高度 int scoreWith=32;//数字图片的宽度 Bitmap [] iscore=new Bitmap[10]; //得分图片组的声明 Bitmap icoin;//硬币图片的声明 Bitmap icar;//小车的声明 Bitmap iRichMan; //土豪的声明 Bitmap ibegin; //开始图片的声明 Bitmap igameover;//游戏结束图片的声明 Bitmap iwin;//游戏胜利图片的声明 Bitmap iexit;//退出游戏图片的声明 Bitmap ireplay;//重玩游戏图片的声明 GameViewDrawThread gameViewDrawThread; //构造方法,对图片资源初始化 int direction=0; private int backSize=16; private Bitmap iback; private int x; public GameView(MainActivity mainActivity) { super(mainActivity); getHolder().addCallback(this); //注册接口 this.mainActivity=mainActivity; initBitmap(); //调用初始化常用方法 gameViewDrawThread=new GameViewDrawThread(this);//启动后台刷屏线程 } public void initBitmap() {//初始化图片资源的方法 /*对score图片组的初始化===========开始*/ iscore[0] = BitmapFactory.decodeResource(getResources(), R.drawable.d0); iscore[1] = BitmapFactory.decodeResource(getResources(), R.drawable.d1); iscore[2] = BitmapFactory.decodeResource(getResources(), R.drawable.d2); iscore[3] = BitmapFactory.decodeResource(getResources(), R.drawable.d3); iscore[4] = BitmapFactory.decodeResource(getResources(), R.drawable.d4); iscore[5] = BitmapFactory.decodeResource(getResources(), R.drawable.d5); iscore[6] = BitmapFactory.decodeResource(getResources(), R.drawable.d6); iscore[7] = BitmapFactory.decodeResource(getResources(), R.drawable.d7); iscore[8] = BitmapFactory.decodeResource(getResources(), R.drawable.d8); iscore[9] = BitmapFactory.decodeResource(getResources(), R.drawable.d9); /*对score图片组的初始化===========结束*/ iback = BitmapFactory.decodeResource(getResources(), R.drawable.back); /*对游戏开始,游戏结束,胜利,重玩游戏以及退出游戏图片的初始化===========开始*/ ibegin = BitmapFactory.decodeResource(getResources(), R.drawable.begin); igameover = BitmapFactory.decodeResource(getResources(), R.drawable.gameover); iwin = BitmapFactory.decodeResource(getResources(), R.drawable.win); iexit = BitmapFactory.decodeResource(getResources(), R.drawable.exit); ireplay = BitmapFactory.decodeResource(getResources(), R.drawable.replay); /*对游戏开始,游戏结束,胜利,重玩游戏以及退出游戏图片的初始化===========结束*/ //对硬币图片的初始化 icoin=BitmapFactory.decodeResource(getResources(), R.drawable.coin); //对小车图片的初始化 icar=BitmapFactory.decodeResource(getResources(), R.drawable.car); //对土豪图片的初始化 /*切忌drawable里面的资源名字必须小写或者数字,不能大写,不然R.java文件不能自动添加id,导致运行不稳定,*/ iRichMan=BitmapFactory.decodeResource(getResources(), R.drawable.richman); initCoinAndCar(); //初始化硬币和小车的位置的方法 } public void initCoinAndCar() {//初始化硬币和小车的位置的方法 coiny= 10; /*screenHeight-bottomSpance-carHeight-coinSize;*/ //计算硬币的y坐标 //硬币的x坐标为10~screenWith之间的随机数 coinx=screenWidth/2-carWidth/2; //(int) ((screenWidth-10)*Math.random())+10; carx=screenWidth/2-carWidth/2; //计算小车的x坐标 cary=screenHeight-bottomSpance-carHeight;//计算小车的y坐标 richManX=screenWidth/2-carWidth/2-richManWidth-coinSize/2; //土豪的X坐标初始位置 richManY=10-richManHeight/2; //土豪的Y坐标 } /*replay()方法功能是清除上次一轮游戏留下的数据*/ public void replay() { if(status==2 || status==3){ coinSpan=8; //初始化硬币的速度 //2->游戏结束,3->游戏胜利*/ initCoinAndCar();//初始化硬币和小车的位置的方法 //score=0; //清零得分,在这里清零没有办好让玩家失败后看到成绩 run_flag=0; // } } public void Automatic_replay() { //当小车接住硬币时调用这个方法,自动重新开始, //但是不会把数据清零 /*这块调整成绩达到一定值后,更改硬币的下落速度 */ if(score>=2) coinSpan=10; if(score>=4) coinSpan=20; if(score>=6) coinSpan=30; if(score>=8) coinSpan=40; if(score>=10) coinSpan=45; if(score>=15) coinSpan=50; if(score>=20) coinSpan=60; //coiny= 10; /*screenHeight-bottomSpance-carHeight-coinSize;*/ //计算硬币的y坐标 //硬币的x坐标为10~screenWith之间的随机数 int random=(int) ((screenWidth-10)*Math.random())+10; while(random>460 ||random<20){ random=(int) ((screenWidth-10)*Math.random())+10; } //richManX=random-richManWidth-coinSize/2; richManY=10-richManHeight/2; coiny= 20; //coinx=random; coinx=coinThread.father.richManX+15; carx=x;///screenWidth/2-carWidth/2; //计算小车的x坐标 cary=screenHeight-bottomSpance-carHeight;//计算小车的y坐标 //initCoinAndCar();//初始化硬币和小车的位置的方法 coinThread.flag=true; run_flag=0; status=0; // status=1; } /*绘制游戏界面的方法*/ @SuppressLint("WrongCall") public void doDraw(final Canvas canvas) { //1.绘画背景 super.onDraw(canvas); //清背景 int cols=screenWidth/backSize+((screenWidth%backSize==0)?0:1);//列数 int rows=screenHeight/backSize+((screenHeight%backSize==0)?0:1);//行数 for(int i=0;i<rows;i++){ for(int j=0;j<cols;j++){ canvas.drawBitmap(iback, 16*j,16*i, null); } } //绘制游戏得分的整体图片 String scoreString=score+""; int loop=3-scoreString.length(); //通过循环在分值得前面填加0,构成三位数得分图片组 for (int i = 0; i < loop; i++) { scoreString="0"+scoreString; } //计算得分图片组绘制的开始x坐标 int startX=screenWidth-scoreWith*3-10; for (int i = 0; i < 3; i++) { //通过ASCII码计算,得出绘制的图片 int tempScore=scoreString.charAt(i)-'0'; canvas.drawBitmap(iscore[tempScore], startX+i*scoreWith, 5, null); } /*绘制硬币的图*/ canvas.drawBitmap(icoin, coinx, coiny, null); //canvas.drawBitmap(icoin, coinx, coiny, null); //绘制接硬币的小车 canvas.drawBitmap(icar, carx, cary-bottomSpance, null); //绘制土豪 canvas.drawBitmap(iRichMan, richManX, richManY, null); //绘制开始按钮,,, /*记录游戏的状态变量 0->等待开始,1->进行中,2->游戏结束,3->游戏胜利*/ if(status==0){ //游戏处于等待状态,绘制开始按钮 canvas.drawBitmap(ibegin, screenWidth/2-hintWidth/2, screenHeight/2-hintHeight/2, null); } //绘制失败图片 if(status==2){ //游戏结束的情况下,绘制失败图片 canvas.drawBitmap(igameover,screenWidth/2-hintWidth/2, screenHeight/2-hintHeight/2, null); } //绘制胜利图片 if(status==3){ //游戏胜利的情况下,绘制胜利图片 canvas.drawBitmap(iwin,screenWidth/2-hintWidth/2, screenHeight/2-hintHeight/2, null); } //绘制退出按钮,一直显示 canvas.drawBitmap(iexit,screenWidth-50,screenHeight/2,null); //绘制重玩 按钮 if(status==2||status==3){//当游戏结束或者游戏胜利时绘制重玩按钮 canvas.drawBitmap(ireplay ,10,screenHeight/2,null); } } @Override //处理玩家点击屏幕的事件 public boolean onTouchEvent(MotionEvent event) { // TODO Auto-generated method stub x = (int) event.getX(); //获取被点击的x坐标 int y = (int) event.getY(); //获取被点击的y坐标 if(x<screenWidth && x>screenWidth-50 && y<screenHeight/2+20 && y>screenHeight/2){ //按下退出按钮 System.exit(0); //退出程序 } if(status==0){ //游戏处于等待状态,按下屏幕任意地方,游戏会开始 status=1; //设置游戏进行状态 scoreThread=new ScoreThread(this); //创建新的计时线程 coinThread=new CoinGoThread(this); //创建新的CoinGoThread线程 scoreThread.start(); //启动线程 coinThread.start(); } else if(status==1){ //游戏处于进行状态 /*分开处理触摸的时间*/ switch (event.getAction()) { /*点屏幕*/ case MotionEvent.ACTION_DOWN : carx=x; break; /*移动位置*/ case MotionEvent.ACTION_MOVE : carx=x; break; /*离开屏幕*/ case MotionEvent.ACTION_UP : carx=x; break; default: break; } //carx=x; //移动小车的位置 } else if(status==2 || status==3){ //游戏失败或者胜利的状态下 if(x<45 && x>0 && y<screenHeight/2+20 && y>screenHeight/2){//按下重玩按钮 status=0; score=0; //在这里使清零得分会有助于玩家失败是看到自己的成绩 replay(); //调用重置的方法重新玩游戏 } } return super.onTouchEvent(event); } public GameView(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-generated constructor stub } public GameView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); // TODO Auto-generated constructor stub } @Override //主要处理当Surface的尺寸发生变化时需要执行的代码放置在此处 public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) { // TODO Auto-generated method stub } @Override //当Surface被创建后,将需要执行的代码放置在此处 public void surfaceCreated(SurfaceHolder arg0) { //创建时启动相应的线程 this.gameViewDrawThread.flag=true; gameViewDrawThread.start(); // TODO Auto-generated method stub } @Override //当Surface被移除当前显示屏幕时回调的方法的代码放置在此处 public void surfaceDestroyed(SurfaceHolder arg0) { //摧毁释放相应的进程 boolean retry=true; this.gameViewDrawThread.flag=false; while(retry){ try { gameViewDrawThread.join(); retry=false; } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } // TODO Auto-generated method stub }
}
package com.example.amu;
import android.graphics.Canvas;
import android.view.SurfaceHolder;
public class GameViewDrawThread extends Thread{
boolean flag = true;
int sleepSpan = 100;
GameView gameView;
SurfaceHolder surfaceHolder;
public GameViewDrawThread(GameView gameView){
this.gameView = gameView;
this.surfaceHolder = gameView.getHolder();
}
public void run(){
Canvas c;
while (this.flag) {
c = null;
try {
// 锁定整个画布,在内存要求比较高的情况下,建议参数不要为null
c = this.surfaceHolder.lockCanvas(null);
synchronized (this.surfaceHolder) { gameView.doDraw(c);//绘制 } } finally { if (c != null) { //并释放锁 this.surfaceHolder.unlockCanvasAndPost(c); } } try{ Thread.sleep(sleepSpan);//睡眠指定毫秒数 } catch(Exception e){ e.printStackTrace();//打印堆栈信息 } } }
}(<a href="http://www.dztcsd.com/">资质代办</a>)
package com.example.amu;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageView;
public class MainActivity extends Activity {
GameView gameView; //GameView 的引用 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //requestWindowFeature(Window.FEATURE_NO_TITLE); ///设置为无标题 // getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, //WindowManager.LayoutParams.FLAG_FULLSCREEN);//设置全屏 gameView=new GameView(this); //创建GameView setContentView(gameView); WindowManager wm = this.getWindowManager(); int width = wm.getDefaultDisplay().getWidth(); int height = wm.getDefaultDisplay().getHeight(); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; }
}
package com.example.amu;
public class ScoreThread extends Thread {
GameView gameView;//GameView 的引用 int highest=60; //胜利值,游戏的最高得分 public boolean flag=true; //线程释放执行的标志位 public ScoreThread(GameView gameView) { //构造器 this.gameView=gameView; // TODO Auto-generated constructor stub } public void run() { while(flag){ //gameView.score++;//得分增加 if(gameView.score==highest){ //判断时间是否达到胜利时间 gameView.status=3; //游戏胜利 //gameView.scoreThread.stop(); gameView.scoreThread.flag=false; //停止TimeThread执行 gameView.coinThread.flag=false; //停止coinThread执行 } try { Thread.sleep(1000); //休眠1S } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
}
作者: 哈哈哈_3
来源:慕课网
本文原创发布于慕课网 ,转载请注明出处,谢谢合作!
相关文章推荐
- Java初学者:Jsp开发环境配置全过程
- Java初学者:Jsp开发环境配置全过程
- JAVA 面向对象编程开发--------初学者---------------------彩票系统----图书管理系统
- 从无到有的Java小游戏开发练习(一)---推箱子
- 从无到有的Java小游戏开发练习(一)---推箱子
- java初学者常用开发工具介绍
- java swing开发短小精悍的俄罗斯方块小游戏源代码下载,仅300行代码
- 30本pdf完整版的经典Linux学习和开发教程和资料下载 android arm java 资料大全
- java开发环境安装及环境变量配置(写给java初学者)
- CC++初学者编程教程(10) 搭建Android java C/C++ NDK QTforAndroid 开发环境
- Java初学者:Jsp开发环境配置全过程
- Java初学者需掌握的30个基本概念-Java基础-Java-编程开发
- Java初学者都必须理解的六大问题-Java基础-Java-编程开发
- java初学者常用开发工具介绍
- Java初学者常用开发工具介绍
- 初学者入门:Java开发环境配置大全
- 每个java初学者都应该搞懂的问题-Java基础-Java-编程开发
- 1:学习java需注意------>开发工具的使用(初学者)
- 软件开发平台正在面临一次重大的升级,java, net比起来简直弱爆了,新型的Html5+JS+JSON开发平台正在形成
- CC++初学者编程教程(10) 搭建Android java C/C++ NDK QTforAndroid 开发环境