package wyf.wpf; //声明包语句
import java.util.ArrayList;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Rect;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
/*
* 该类是游戏的主视图类,负责游戏画面的绘制,菜单的绘制绘制等等
* 成员方法多为绘制方法,同时也有修改游戏数据的方法,如关卡数据等。为实现
* SurfaceHolder.Callback接口重写了一些方法
*/
public class GameView extends SurfaceView implements SurfaceHolder.Callback{
Ball ball; //小球对象
int fieldLeft=27; //球场的左边界在屏幕中的位置
int fieldRight=293; //球场的右边界在屏幕中的位置
int fieldUp = 68; //球场的上边界在屏幕中的位置
int fieldDown = 470; //球场的下边界在屏幕中的位置
int barDistance = 50; //两个摇杆的间距
int playerSize = 18; //运动员图片的大小
int maxLeftPosition = 115; //守门员最左能走到的地方=
int maxRightPosition = 205; //守门员最右能走到的地方=
int aiDirection = -1; //记录AI的运动方向,4为左,12为右=
int level=1; //游戏的难度
int MaxLevel = 3; //最高等级
int [] scores = {0,0}; //比分,前我后敌
int scoreLeft = 80; //绘制左边比分时的参考X坐标
int scoreRight = 240; //绘制右边比分时的参考X坐标
int timeCounter=0; //计时器,用于显示
int winPoint = 8; //获胜点,谁的进球数先达到该值获胜
int AIGoalLeft; //AI球门左边=
int AIGoalRight; //AI球门右边=
int myGoalLeft; //玩家的球门左边=
int myGoalRight; //玩家的球门右边=
boolean isScoredAGoal; //若进了球则暂时会置为true
boolean isGameOver; //一局比赛结束
boolean isGameWin; //是否赢了
boolean isShowDialog; //是否显示对话框
boolean isGamePassAll; //是否打赢了所有等级的比赛
ArrayList<Bonus> balLive = new ArrayList<Bonus>();//这个用于碰撞检测,里面全是活动态的Bonus=
ArrayList<Bonus> balForDraw = new ArrayList<Bonus>();//这个用于绘制,里面既有活动态,也有生效态的Bonus=
ArrayList<Bonus> balAdd = new ArrayList<Bonus>(); //存放待添加Bonus对象的临时集合=
ArrayList<Bonus> balDelete = new ArrayList<Bonus>(); //存放待删除Bonus对象的临时集合=
BonusManager bm; //BonusManager对象引用=
FootballActivity father; //FootballActivity对象引用
DrawThread dt; //后台刷屏线程
AIThread ait; //控制AI移动的线程
ArrayList<Player> alMyPlayer = new ArrayList<Player>(11); //玩家的运动员集合
ArrayList<Player> alAIPlayer = new ArrayList<Player>(11); //AI 的运动员集合
Bitmap bmpMyPlayer; //玩家的球员图片
Bitmap bmpAIPlayer; //AI的球员图片
Bitmap bmpGoalBanner; //进球后显示的图片
Bitmap [] bmpScores; //表示比分的数字图片
Bitmap bmpWinBanner; //游戏胜利的图片
Bitmap bmpWinText; //游戏胜利的文字
Bitmap bmpLoseBanner; //游戏失败的图片
Bitmap bmpLoseText; //游戏失败的文字
Bitmap bmpPassAll; //打赢所有比赛提示的图片
Bitmap bmpMyClub; //记录玩家所选的俱乐部
Bitmap bmpAIClub; //记录AI的俱乐部
Bitmap bmpMenu; //菜单图片
Bitmap bmpDialog; //对话框图片
Bitmap bmpBackField; //球场背景图片
//Rect对象,用来与点击事件发生的位置进行匹配
Rect rectMenu = new Rect(134,0,186,60); //代表菜单的矩形框,
Rect rectYesToDialog = new Rect(75,271,100,292); //代表返回主菜单对话框中的是按钮
Rect rectNoToDialog = new Rect(223,271,248,292); //代表返回主菜单对话框中的否按钮
int clubID;//存放俱乐部logo的图片ID
//构造器,初始化成员变量
public GameView(FootballActivity father,int clubID) {
super(father); //调用父类构造器
getHolder().addCallback(this);//添加Callback接口
this.father = father;
this.clubID = clubID;//获得俱乐部logo
ball = new Ball(this); //创建足球线程
initPlayerInstance();//初始化双方队员
initGame();//初始化游戏
initBitmap(father); //初始化图片资源
ait = new AIThread(this);//创建AI分析线程
bm = new BonusManager(this);//初始化BonusManager
dt = new DrawThread(this,getHolder());//创建后台刷屏线程
}
//启动线程
public void startGame(){
ait.start(); //启动AI分析线程
bm.start(); //启动BonusManager线程
ball.start(); //启动足球线程
}
//初始化位图
public void initBitmap(Context context){
Resources r = context.getResources(); //获得Resources对象
bmpMyPlayer = BitmapFactory.decodeResource(r,R.drawable.player18); //玩家球员图片初始化
bmpAIPlayer = BitmapFactory.decodeResource(r, R.drawable.ai_player); //AI球员图片初始化
bmpScores = new Bitmap[10]; //数字图片初始化
bmpScores[0] = BitmapFactory.decodeResource(r, R.drawable.digit_0); //数字图片0
bmpScores[1] = BitmapFactory.decodeResource(r, R.drawable.digit_1); //数字图片1
bmpScores[2] = BitmapFactory.decodeResource(r, R.drawable.digit_2); //数字图片2
bmpScores[3] = BitmapFactory.decodeResource(r, R.drawable.digit_3); //数字图片3
bmpScores[4] = BitmapFactory.decodeResource(r, R.drawable.digit_4); //数字图片4
bmpScores[5] = BitmapFactory.decodeResource(r, R.drawable.digit_5); //数字图片5
bmpScores[6] = BitmapFactory.decodeResource(r, R.drawable.digit_6); //数字图片6
bmpScores[7] = BitmapFactory.decodeResource(r, R.drawable.digit_7); //数字图片7
bmpScores[8] = BitmapFactory.decodeResource(r, R.drawable.digit_8); //数字图片8
bmpScores[9] = BitmapFactory.decodeResource(r, R.drawable.digit_9); //数字图片9
bmpGoalBanner = BitmapFactory.decodeResource(r, R.drawable.game_goal); //进球后的标语
bmpWinText = BitmapFactory.decodeResource(r, R.drawable.game_win); //比赛胜利时的提示文字
bmpLoseBanner = BitmapFactory.decodeResource(r, R.drawable.game_over); //比赛失败时的提示图片
bmpLoseText = BitmapFactory.decodeResource(r, R.drawable.game_lose); //比赛失败时的提示文字
Matrix m = new Matrix(); //创建Matrix对象,用于裁剪图片以适合游戏界面中俱乐部图片的大小
Bitmap bmpTemp = BitmapFactory.decodeResource(r,(int) clubID); //拿到指定的俱乐部图片
int width = bmpTemp.getWidth(); //获得俱乐部图片宽度
int height = bmpTemp.getHeight(); //获取俱乐部图片高度
m.postScale(60.0f/width,60.0f/height); //设置Matrix
bmpMyClub = Bitmap.createBitmap(bmpTemp, 0, 0, width,height , m, true); //玩家俱乐部logo
bmpAIClub = BitmapFactory.decodeResource(r, R.drawable.ai_club); //AI的俱乐部logo
bmpMenu = BitmapFactory.decodeResource(r, R.drawable.menu);//菜单按钮图片
bmpDialog = BitmapFactory.decodeResource(r, R.drawable.dialog); //菜单对话框
bmpBackField = BitmapFactory.decodeResource(r, R.drawable.field);//足球场背景
bmpPassAll = BitmapFactory.decodeResource(r, R.drawable.game_pass); //打赢所有比赛的提示图片
}
//初始化游戏参数,通关后会调用这个方法,包含initRound方法
public void initGame(){
scores[0]=0; //玩家比分归零
scores[1]=0; //AI比分归零
AIGoalLeft = maxLeftPosition; //初始化AI的球门左边坐标
AIGoalRight = maxRightPosition; //初始化AI的球门右边坐标
myGoalLeft = maxLeftPosition; //初始化玩家的球门左边坐标
myGoalRight = maxRightPosition; //初始化玩家的球门左边坐标
initRound();
}
//屏幕渲染方法
protected void doDraw(Canvas canvas) {
canvas.drawBitmap(bmpBackField, 0, 0, null); //画球场背景
//画出小球
ball.drawSelf(canvas);
//画出双方玩家
drawBothPlayers(canvas);
//画出比分
drawScores(canvas);
//检查并绘制活的Bonus
checkAndDrawBonus(canvas);
//画出双方的logo
drawLogo(canvas);
//画出菜单
canvas.drawBitmap(bmpMenu, 134, 0, null);
if(isScoredAGoal){ //如果进了一球,绘制进球图片
canvas.drawBitmap(bmpGoalBanner, (fieldLeft+fieldRight)/2-bmpGoalBanner.getWidth()/2, (fieldUp+fieldDown)/2-bmpGoalBanner.getHeight()/2, null);
timeCounter++; //每画一次,计时器增加
if(timeCounter > 50){ //如果计时器增加到50
isScoredAGoal = false; //设置进球标志位为false
initRound(); //初始化游戏回合
timeCounter = 0; //清空计时器
ball.isPlaying = true; //小球运动标志位设为true
}
}
if(isGameOver){//一场比赛结束,根据胜负,绘制相应图片
if(isGamePassAll){ //是否打赢
没有合适的资源?快使用搜索试试~ 我知道了~
Android游戏_疯狂足球游戏源码
共209个文件
png:108个
class:58个
java:18个
5星 · 超过95%的资源 需积分: 10 167 下载量 174 浏览量
2012-05-06
21:26:38
上传
评论 1
收藏 1.58MB ZIP 举报
温馨提示
疯狂足球游戏源码 本次发布系列大概有28个Android游戏,需要的可以一个个下载
资源推荐
资源详情
资源评论
收起资源包目录
Android游戏_疯狂足球游戏源码 (209个子文件)
resources.ap_ 407KB
CrazyFootball.apk 431KB
GameView.class 12KB
GameView.class 12KB
Ball.class 8KB
Ball.class 8KB
FootballActivity.class 5KB
FootballActivity.class 5KB
WelcomeView.class 5KB
WelcomeView.class 5KB
LoadingView.class 3KB
LoadingView.class 3KB
LargerGoalBonus.class 3KB
LargerGoalBonus.class 3KB
IceBonus.class 3KB
IceBonus.class 3KB
CustomGallery.class 2KB
CustomGallery.class 2KB
R$drawable.class 2KB
R$drawable.class 2KB
BonusManager.class 2KB
BonusManager.class 2KB
Bonus.class 2KB
Bonus.class 2KB
PlayerMoveThread.class 2KB
PlayerMoveThread.class 2KB
LoadingDrawThread.class 1KB
LoadingDrawThread.class 1KB
DrawThread.class 1KB
DrawThread.class 1KB
WelcomeDrawThread.class 1KB
WelcomeDrawThread.class 1KB
WelcomeThread.class 1KB
WelcomeThread.class 1KB
FootballActivity$1.class 1KB
FootballActivity$1.class 1KB
AIThread.class 919B
AIThread.class 919B
Bonus$2.class 862B
Bonus$2.class 862B
Bonus$1.class 583B
Bonus$1.class 583B
R.class 567B
R.class 567B
Player.class 565B
Player.class 565B
R$raw.class 543B
R$raw.class 543B
R$styleable.class 522B
R$styleable.class 522B
R$anim.class 410B
R$anim.class 410B
R$string.class 394B
R$string.class 394B
R$layout.class 361B
R$layout.class 361B
R$id.class 355B
R$id.class 355B
R$attr.class 307B
R$attr.class 307B
.classpath 304B
classes.dex 35KB
GameView.java 16KB
Ball.java 12KB
FootballActivity.java 9KB
WelcomeView.java 6KB
R.java 5KB
LoadingView.java 3KB
LargerGoalBonus.java 3KB
CustomGallery.java 3KB
Bonus.java 3KB
IceBonus.java 2KB
PlayerMoveThread.java 2KB
BonusManager.java 2KB
WelcomeThread.java 2KB
DrawThread.java 1KB
WelcomeDrawThread.java 1KB
LoadingDrawThread.java 1KB
AIThread.java 1KB
Player.java 578B
welcome.jpg 12KB
load.jpg 10KB
p3.jpg 9KB
p1.jpg 8KB
p2.jpg 6KB
music.mp3 27KB
cheer_goal.mp3 12KB
cheer_lose.mp3 9KB
cheer_win.mp3 8KB
ice.mp3 3KB
kick.mp3 2KB
lager_goal.mp3 943B
game_pass.png 23KB
game_pass.png 23KB
game_over.png 19KB
game_over.png 18KB
club_8.png 15KB
club_8.png 14KB
club_4.png 14KB
club_1.png 14KB
共 209 条
- 1
- 2
- 3
Chiclaim
- 粉丝: 2032
- 资源: 56
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
前往页