package mo.gm.scene;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import mo.gm.common.EGmEnum;
import mo.gm.control.audio.FGmSoundPlayer;
import mo.gm.event.OnStateListener;
import mo.gm.event.OnTimerListener;
import mo.gm.event.OnToolsChangeListener;
import mo.gm.llk.R;
import android.content.Context;
import android.graphics.Point;
import android.media.MediaPlayer;
import android.os.Handler;
import android.os.Message;
import android.util.AttributeSet;
import android.view.MotionEvent;
public class FGmGameScene extends FGmScene {
private static final int REFRESH_VIEW = 1;
private int Help = 3;
private int Refresh = 3;
/**
* 第一关为100秒钟的时间
*/
private int totalTime = 100;
private int leftTime;
public static FGmSoundPlayer soundPlay;
public MediaPlayer player;
private RefreshTime refreshTime;
private RefreshHandler refreshHandler = new RefreshHandler();
/**
* 用来停止计时器的线程
*/
private boolean isStop;
private OnTimerListener timerListener = null;
private OnStateListener stateListener = null;
private OnToolsChangeListener toolsChangedListener = null;
private List<Point> path = new ArrayList<Point>();
public FGmGameScene(Context context, AttributeSet atts) {
super(context, atts);
player = MediaPlayer.create(context, R.raw.back2new);
player.setLooping(true);//设置循环播放
}
public void startPlay(){
Help = 3;
Refresh = 3;
isStop = false;
toolsChangedListener.onRefreshChanged(Refresh);
toolsChangedListener.onTipChanged(Help);
leftTime = totalTime;
initMap();
player.start();
refreshTime = new RefreshTime();
refreshTime.start();
FGmGameScene.this.invalidate();
}
public void startNextPlay(){
//下一关为上一关减去10秒的时间
totalTime-=10;
startPlay();
}
public static void initSound(Context context){
soundPlay = new FGmSoundPlayer();
soundPlay.initSounds(context);
soundPlay.loadSfx(context, R.raw.choose, EGmEnum.ID_SOUND_CHOOSE);
soundPlay.loadSfx(context, R.raw.disappear1, EGmEnum.ID_SOUND_DISAPEAR);
soundPlay.loadSfx(context, R.raw.win, EGmEnum.ID_SOUND_WIN);
soundPlay.loadSfx(context, R.raw.lose, EGmEnum.ID_SOUND_LOSE);
soundPlay.loadSfx(context, R.raw.item1, EGmEnum.ID_SOUND_REFRESH);
soundPlay.loadSfx(context, R.raw.item2, EGmEnum.ID_SOUND_TIP);
soundPlay.loadSfx(context, R.raw.alarm, EGmEnum.ID_SOUND_ERROR);
}
public void setOnTimerListener(OnTimerListener timerListener){
this.timerListener = timerListener;
}
public void setOnStateListener(OnStateListener stateListener){
this.stateListener = stateListener;
}
public void setOnToolsChangedListener(OnToolsChangeListener toolsChangedListener){
this.toolsChangedListener = toolsChangedListener;
}
public void stopTimer(){
isStop = true;
}
class RefreshHandler extends Handler {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (msg.what == REFRESH_VIEW) {
FGmGameScene.this.invalidate();
if (win()) {
setMode(EGmEnum.WIN);
soundPlay.play(EGmEnum.ID_SOUND_WIN, 0);
isStop = true;
} else if (die()) {
change();
}
}
}
public void sleep(int delayTime) {
this.removeMessages(0);
Message message = new Message();
message.what = REFRESH_VIEW;
sendMessageDelayed(message, delayTime);
}
}
class RefreshTime extends Thread {
public void run() {
while (leftTime >= 0 && !isStop) {
timerListener.onTimer(leftTime);
leftTime--;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
if(!isStop){
setMode(EGmEnum.LOSE);
soundPlay.play(EGmEnum.ID_SOUND_LOSE, 0);
}
}
}
public int getTotalTime(){
return totalTime;
}
public int getTipNum(){
return Help;
}
public int getRefreshNum(){
return Refresh;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
int x = (int) event.getX();
int y = (int) event.getY();
Point p = screenToindex(x, y);
if (map[p.x][p.y] > 0) {
if (selected.size() == 1) {
if (link(selected.get(0), p)) {
selected.add(p);
drawLine(path.toArray(new Point[] {}));
soundPlay.play(EGmEnum.ID_SOUND_DISAPEAR, 0);
refreshHandler.sleep(500);
} else {
selected.clear();
selected.add(p);
soundPlay.play(EGmEnum.ID_SOUND_CHOOSE, 0);
FGmGameScene.this.invalidate();
}
} else {
selected.add(p);
soundPlay.play(EGmEnum.ID_SOUND_CHOOSE, 0);
FGmGameScene.this.invalidate();
}
}
return super.onTouchEvent(event);
}
public void initMap() {
int x = 1;
int y = 0;
for (int i = 1; i < xCount - 1; i++) {
for (int j = 1; j < yCount - 1; j++) {
map[i][j] = x;
if (y == 1) {
x++;
y = 0;
if (x == iconCounts) {
x = 1;
}
} else {
y = 1;
}
}
}
change();
}
private void change() {
Random random = new Random();
int tmpV, tmpX, tmpY;
for (int x = 1; x < xCount - 1; x++) {
for (int y = 1; y < yCount - 1; y++) {
tmpX = 1 + random.nextInt(xCount - 2);
tmpY = 1 + random.nextInt(yCount - 2);
tmpV = map[x][y];
map[x][y] = map[tmpX][tmpY];
map[tmpX][tmpY] = tmpV;
}
}
if (die()) {
change();
}
FGmGameScene.this.invalidate();
}
public void setMode(int stateMode) {
this.stateListener.OnStateChanged(stateMode);
}
private boolean die() {
for (int y = 1; y < yCount - 1; y++) {
for (int x = 1; x < xCount - 1; x++) {
if (map[x][y] != 0) {
for (int j = y; j < yCount - 1; j++) {
if (j == y) {
for (int i = x + 1; i < xCount - 1; i++) {
if (map[i][j] == map[x][y]
&& link(new Point(x, y),
new Point(i, j))) {
return false;
}
}
} else {
for (int i = 1; i < xCount - 1; i++) {
if (map[i][j] == map[x][y]
&& link(new Point(x, y),
new Point(i, j))) {
return false;
}
}
}
}
}
}
}
return true;
}
List<Point> p1E = new ArrayList<Point>();
List<Point> p2E = new ArrayList<Point>();
private boolean link(Point p1, Point p2) {
if (p1.equals(p2)) {
return false;
}
path.clear();
if (map[p1.x][p1.y] == map[p2.x][p2.y]) {
if (linkD(p1, p2)) {
path.add(p1);
path.add(p2);
return true;
}
Point p = new Point(p1.x, p2.y);
if (map[p.x][p.y] == 0) {
if (linkD(p1, p) && linkD(p, p2)) {
path.add(p1);
path.add(p);
path.add(p2);
return true;
}
}
p = new Point(p2.x, p1.y);
if (map[p.x][p.y] == 0) {
if (linkD(p1, p) && linkD(p, p2)) {
path.add(p1);
path.add(p);
path.add(p2);
return true;
}
}
expandX(p1, p1E);
expandX(p2, p2E);
for (Point pt1 : p1E) {
for (Point pt2 : p2E) {
if (pt1.x == pt2.x) {
if (linkD(pt1, pt2)) {
path.add(p1);
path.add(pt1);
path.add(pt2);
path.add(p2);
return true;
}
}
}
}
expandY(p1, p1E);
expandY(p2, p2E);
for (Point pt1 : p1E) {
for (Point pt2 : p2E) {
if (pt1.y == pt2.y) {
if (linkD(pt1, pt2)) {
path.add(p1);
path.add(pt1);
path.add(pt2);
path.add(p2);
return true;
}
}
}
}
return false;
}
return false;
}
private boolean linkD(Point p1, Point p2) {
if (p1.x == p2.x) {
int y1 = Math.min(p1.y, p2.y);
int y2 = Math.max(p1.y, p2.y);
boolean flag = true;
for (int y = y1 + 1; y < y2; y++) {
if (map[p1.x][y] != 0) {
flag = false;
break;
}
}
if (flag)
没有合适的资源?快使用搜索试试~ 我知道了~
llk.rar_llk_安卓 游戏_连连看 安卓
共94个文件
png:32个
class:24个
xml:12个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 43 浏览量
2022-09-24
05:45:33
上传
评论
收藏 1.31MB RAR 举报
温馨提示
益智游戏连连看的安卓版本源码,绝对可以运行
资源推荐
资源详情
资源评论
收起资源包目录
llk.rar (94个子文件)
lianliankan.Android
bin
res
classes
mo
gm
control
ui
FGmQuitDialog$1.class 997B
FGmQuitDialog$2.class 844B
FGmQuitDialog.class 3KB
audio
FGmSoundPlayer.class 2KB
llk
BuildConfig.class 327B
R$layout.class 405B
R$id.class 836B
R$drawable.class 1KB
R$attr.class 313B
R.class 579B
R$string.class 571B
R$anim.class 495B
R$style.class 366B
R$raw.class 594B
common
EGmEnum.class 684B
scene
FGmGameScene.class 10KB
FGmGameScene$RefreshHandler.class 1KB
FGmScene.class 4KB
FGmGameScene$RefreshTime.class 1KB
activity
FGmGameActivity.class 6KB
FGmGameActivity$1.class 1KB
event
OnTimerListener.class 148B
OnToolsChangeListener.class 192B
OnStateListener.class 155B
AndroidManifest.xml 901B
res
drawable-ldpi
icon.png 4KB
raw
item1.ogg 10KB
alarm.ogg 9KB
back2new.ogg 474KB
item2.ogg 9KB
disappear1.ogg 7KB
lose.ogg 15KB
bg.ogg 242KB
choose.ogg 6KB
win.ogg 16KB
drawable-hdpi
icon.png 11KB
drawable-xhdpi
buttons_quit.png 4KB
clock.png 3KB
refresh.png 15KB
buttons_bg20.png 11KB
buttons_bg1.png 29KB
light_bulb.png 12KB
buttons_next.png 4KB
mainbg.jpg 197KB
title.png 24KB
icon.png 18KB
buttons_replay.png 5KB
buttons_play.png 6KB
drawable
fruit_18.png 10KB
fruit_17.png 8KB
fruit_02.png 7KB
fruit_09.png 8KB
fruit_11.png 10KB
fruit_06.png 7KB
fruit_05.png 10KB
fruit_14.png 11KB
fruit_12.png 6KB
fruit_04.png 10KB
fruit_13.png 10KB
fruit_15.png 10KB
fruit_10.png 12KB
fruit_03.png 9KB
fruit_07.png 10KB
fruit_08.png 10KB
fruit_16.png 9KB
shape.xml 347B
fruit_01.png 12KB
values
strings.xml 434B
styles.xml 517B
drawable-mdpi
icon.png 6KB
anim
cycle.xml 139B
scale_anim.xml 470B
scale_anim_out.xml 471B
trans_in.xml 192B
shake.xml 232B
layout
dialog_view.xml 2KB
welcome.xml 3KB
assets
data
gen
mo
gm
llk
BuildConfig.java 151B
R.java 4KB
proguard.cfg 1KB
.settings
org.eclipse.jdt.core.prefs 177B
src
mo
gm
control
ui
FGmQuitDialog.java 2KB
audio
FGmSoundPlayer.java 2KB
common
EGmEnum.java 594B
scene
FGmScene.java 5KB
FGmGameScene.java 9KB
activity
FGmGameActivity.java 5KB
event
OnStateListener.java 109B
OnTimerListener.java 101B
OnToolsChangeListener.java 152B
.project 855B
.classpath 475B
project.properties 563B
AndroidManifest.xml 901B
共 94 条
- 1
资源评论
林当时
- 粉丝: 97
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功