📄 gamecanvas.java
字号:
break;
case LEVEL:
int tmpL=sd.getLevel();
if(tmpL==0){
level=0;
}else{
if (level < tmpL-1)//
level++;
else
level = 0; //到底则为0
}
repaint();
break;
case SUBLEVEL:
if (subLevel + 5 < 20) { //
subLevel = subLevel + 5;
} else {
subLevel = subLevel - 15; //到底则为0
}
repaint();
break;
case HELP:
if (scoll < 17) //
scoll++;
repaint();
break;
case GAME:
if(menuState==9){ //控制方块
moveDown();
doCount++;
repaint();
}
if(menuState==8){ //菜单
if (menuNum < 3) //小于
menuNum ++;
else
menuNum = 0; //到顶则为最后
repaint();
}
break;
}
}
if (keyCode == KEY_LEFT_ARROW || keyCode==KEY_NUM4) {
switch(gameState){
case LEVEL:
int tmpL=sd.getLevel();
if(tmpL==0){
level=0;
}else{
if (level > 0) //小于
level--;
else
level = tmpL-1; //到顶则为最后
}
repaint();
break;
case SUBLEVEL:
if (subLevel > 0) //小于
subLevel--;
else
subLevel = 19; //到顶则为最后
repaint();
break;
case GAME:
if(menuState==9){ //控制方块
moveLeft();
doCount++;
repaint();
}
break;
}
}
if (keyCode == KEY_RIGHT_ARROW|| keyCode==KEY_NUM6) {
switch(gameState){
case LEVEL:
int tmpL=sd.getLevel();
if(tmpL==0){
level=0;
}else{
if (level < tmpL-1)//
level++;
else
level = 0; //到底则为0
}
repaint();
break;
case SUBLEVEL:
if (subLevel < 19)
subLevel++;
else
subLevel = 0; //到底则为0
repaint();
break;
case GAME:
if(menuState==9){ //控制方块
moveRight();
doCount++;
repaint();
}
break;
}
}
}
protected void keyReleased(int arg0) {
if (gameState == GAME) {
if (doCount > 2 && menuState==9) {
passSubLevel();
repaint();
}
}
}
//进入小关选择
private void gotoSubLevel(){
passCount=0;
//标记每个小关是否通过
if(sd.getLevel()==0){//没记录
levelPass=new boolean[20];
stars =new boolean [20];
score =new int [20];
}else{
//从记录仓库获取数据
levelPass = sd.getSubPass(level);
stars =sd.getSubStars(level);
score =sd.getSubScore(level);
for(int i=0;i<20;i++){
if(levelPass[i]) //统计已过关的
passCount++;
}
}
//System.out.println("First passCount"+passCount);
//初始化数据
menuState = 9;
gameState = SUBLEVEL;
}
//**======新游戏======**//*
private void newGame() {
menuNum = 0;
doCount = 0;
completeColor = 0;
gl = new GameLogic(); //当前小关的布置
gl.readMap(level, subLevel);
int tmpLength = gl.gameMap.length;
mark = new boolean[tmpLength][tmpLength];
repaint();
}
//处理首页菜单
private void doIndexMenu() {
switch (menuNum) {
case 0: //new game
if (sd.getLevel()>0) { //有记录
menuState = 0;
} else { //进入SUBLEVEL
level=0;
gameState=NEWGAME;
//gotoSubLevel();
}
repaint();
break;
case 1: //读取进度
int tmpL=sd.getLevel();
if (tmpL>0) { //有记录
level=tmpL-1;
gameState = LEVEL;
menuState = 9;
} else {
menuState = 1;
}
repaint();
break;
case 2: //查看记录
if (sd.getLevel()>0) { //有记录
gameState = SEELOG;
} else {
menuState = 3;
}
repaint();
break;
case 3: //帮助
gameState = HELP;
repaint();
break;
case 4: //声音设置
menuState = 5;
soundOpen = !soundOpen;
repaint();
soundCotrol();
break;
case 5: //关于
gameState = ABOUT;
repaint();
break;
case 6://退出
exit();
break;
}
}
//处理游戏菜单
private void doGameMenu(){
switch(menuNum){
case 0: //保存进度
menuState=1;
repaint();
sd.writeDate(level, score, stars, levelPass);
break;
case 1: //帮助
gameState = HELP;
repaint();
break;
case 2: //声音
menuState=0;
soundOpen = !soundOpen;
repaint();
soundCotrol();
break;
case 3: //返回主菜单
gameState=INDEX;
menuState = 9;
menuNum=1;
repaint();
break;
}
}
private void exit(){
player.close();
scFresh.cancel();
mark=null; //标记
levelPass=null;
stars=null; //小关星星数
score=null; //小关分数
m.notifyDestroyed();
}
/**向上移动**/
private void moveUp() {
intMark();
int tmpLength = gl.gameMap.length;
for (int j = 0; j < tmpLength; j++) {
if (gl.gameMap[0][j] > 0) {
mark[0][j] = true;
}
}
for (int i = 1; i < tmpLength; i++) { //从第2行向下搜索
for (int j = 0; j < tmpLength; j++) {
//white diamonds is not move
if (gl.gameMap[i][j] == 1) {
mark[i][j] = true;
//上方有不能动的则所有连接的同色的不能动
}
if (gl.gameMap[i][j] > 1 && mark[i - 1][j]) {
markDiamonds(i, j, gl.gameMap[i][j]);
}
}
}
//check other colors
checkMoveUp();
// draw the tiles in their new positions
for (int i = 1; i < tmpLength; i++) {
for (int j = 0; j < tmpLength; j++) {
if (gl.gameMap[i][j] > 1 && !mark[i][j]) {
gl.gameMap[i - 1][j] = gl.gameMap[i][j];
gl.gameMap[i][j] = 0;
}
}
}
}
//递归检测
private void checkMoveUp() {
int tmpLength = gl.gameMap.length;
for (int i = 1; i < tmpLength; i++) { //从第2行向下搜索
for (int j = 0; j < tmpLength; j++) {
if (gl.gameMap[i][j] > 1 && !mark[i][j] && mark[i - 1][j]) {
markDiamonds(i, j, gl.gameMap[i][j]);
checkMoveUp(); //递归
return;
}
}
}
}
/**向下移动**/
private void moveDown() {
intMark();
int tmpLength = gl.gameMap.length;
for (int j = 0; j < tmpLength; j++) {
if (gl.gameMap[tmpLength - 1][j] > 0) {
mark[tmpLength - 1][j] = true;
}
}
for (int i = tmpLength - 2; i >= 0; i--) { //从倒数第2行向上搜索
for (int j = 0; j < tmpLength; j++) {
//white diamonds is not move
if (gl.gameMap[i][j] == 1) {
mark[i][j] = true;
//下方有不能动的则所有连接的同色的不能动
}
if (gl.gameMap[i][j] > 1 && mark[i + 1][j]) {
markDiamonds(i, j, gl.gameMap[i][j]);
}
}
}
//other
checkMoveDown();
// draw the tiles in their new positions
for (int i = tmpLength - 1; i >= 0; i--) {
for (int j = 0; j < tmpLength; j++) {
if (gl.gameMap[i][j] > 1 && !mark[i][j]) {
gl.gameMap[i + 1][j] = gl.gameMap[i][j];
gl.gameMap[i][j] = 0;
}
}
}
}
//递归检测
private void checkMoveDown() {
int tmpLength = gl.gameMap.length;
for (int i = tmpLength - 2; i >= 0; i--) { //从倒数第2行向上搜索
for (int j = 0; j < tmpLength; j++) {
if (gl.gameMap[i][j] > 1 && !mark[i][j] && mark[i + 1][j]) {
markDiamonds(i, j, gl.gameMap[i][j]);
checkMoveDown(); //递归
return;
}
}
}
}
/**向左移动**/
private void moveLeft() {
intMark();
int tmpLength = gl.gameMap.length;
for (int j = 0; j < tmpLength; j++) {
if (gl.gameMap[j][0] > 0) {
mark[j][0] = true;
}
}
for (int j = 1; j < tmpLength; j++) {
for (int i = 0; i < tmpLength; i++) { //从第2列向右搜索
if (gl.gameMap[i][j] == 1) { //white diamonds is not move
mark[i][j] = true;
//左方有不能动的则所有连接的同色的不能动
}
if (gl.gameMap[i][j] > 1 && mark[i][j - 1]) {
markDiamonds(i, j, gl.gameMap[i][j]);
}
}
}
checkMoveLeft();
// draw the tiles in their new positions
for (int i = 0; i < tmpLength; i++) {
for (int j = 0; j < tmpLength; j++) {
if (gl.gameMap[i][j] > 1 && !mark[i][j]) {
gl.gameMap[i][j - 1] = gl.gameMap[i][j];
gl.gameMap[i][j] = 0;
}
}
}
}
//递归检测
private void checkMoveLeft() {
int tmpLength = gl.gameMap.length;
for (int j = 1; j < tmpLength; j++) {
for (int i = 0; i < tmpLength; i++) {
if (gl.gameMap[i][j] > 1 && !mark[i][j] && mark[i][j - 1]) {
markDiamonds(i, j, gl.gameMap[i][j]);
checkMoveLeft(); //递归
return;
}
}
}
}
/**向右移动**/
private void moveRight() {
intMark();
int tmpLength = gl.gameMap.length;
for (int j = 0; j < tmpLength; j++) {
if (gl.gameMap[j][tmpLength - 1] > 0) {
mark[j][tmpLength - 1] = true;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -