📄 gamecanvas.java
字号:
g.setColor(0xC9B376);
g.fillRect(0, 0, getWidth(), 25);
fillBack(g,0,25,11,12); //纹理
g.setColor(0x000000);
g.drawLine(0,25,getWidth(),25);
g.drawString("关 于", 68, 5, 20);
g.setColor(0xeeeeee);
for(int i=0;i<8;i++){//显示11行
g.drawString(about[i], 3, 30+18*i, 20);
}
//back
drawButton(g,137,189,"返回");
}
/**绘画游戏:paintGame**/
private void paintGame(Graphics g) {
//===不动的
if (doCount == 0 || menuState==8) {
//背景图
g.setColor(0x000000);
g.fillRect(0,0,getWidth(),getHeight());
for (int i = 0; i < 22; i++) {
g.drawImage(li.gamePageImg[0], i*8, 0, 20);
}
for (int i = 0; i < 20; i++) {
g.drawImage(li.gamePageImg[0], 0, 8+i*8, 20);
g.drawImage(li.gamePageImg[0], 168, 8+i*8, 20);
}
//灰点
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 9; j++) {
g.drawImage(li.gamePageImg[2], 102+j*8, 179+i*8, 20);
}
}
//星星图
drawStar(g);
//要求完成的色块
g.drawImage(li.gamePageImg[1], 16, 175, 20);
drawRequireColor(g);
}
//==动的
fillBack(g,8,8,10,10);//格子
drawDiamond(g);//方块
//声音设置
if(menuState==0){
g.setColor(0x000000);
if (soundOpen)
drawDoing(g, 38, 91, "声音打开");
else
drawDoing(g, 38,91, "声音关闭");
}
//保存
if(menuState==1){
g.setColor(0x000000);
drawDoing(g, 38,91, "保存中…");
}
//菜单
if(menuState==8){
drawGameMenu(g);
}
}
//绘画方块:drawDiamond
private void drawDiamond(Graphics g) {
int boxWidth=10;
for (int i = 0; i < gl.gameMap.length; i++) {
for (int j = 0; j < gl.gameMap.length; j++) {
if (gl.gameMap[i][j] > 0) {
int x = 8 + j * boxWidth;
int y = 8 + i * boxWidth;
g.setColor(setDiaColor(gl.gameMap[i][j]));
g.fillRect(x, y, boxWidth, boxWidth); //画方块
//明暗线
if (i - 1 >= 0 && gl.gameMap[i - 1][j] != gl.gameMap[i][j]) { //up
g.setColor(0xffffff); //明部
g.drawLine(x, y, x + boxWidth - 1, y);
}
if (i <= gl.gameMap.length - 2 && gl.gameMap[i + 1][j] != gl.gameMap[i][j]) { //down
g.setColor(0x000000); //暗部
g.drawLine(x, y + boxWidth - 1, x + boxWidth - 1, y + boxWidth-1);
}
if (j - 1 >= 0 && gl.gameMap[i][j - 1] != gl.gameMap[i][j]) { //left
g.setColor(0xffffff); //明部
g.drawLine(x, y, x, y + boxWidth - 1);
}
if (j <= gl.gameMap.length - 2 && gl.gameMap[i][j + 1] != gl.gameMap[i][j]) { //right
g.setColor(0x000000); //暗部
g.drawLine(x + boxWidth - 1, y, x + boxWidth - 1, y + boxWidth-1);
}
}
}
}
}
//绘画特殊图形
private void drawStar(Graphics g) {
if (gl.starMap != null) {
g.drawImage(li.starSmallImg, 80, 174,20);
for (int i = 0; i < gl.starMap.length; i++) { //行
for (int j = 0; j < gl.starMap[0].length; j++) { //列
if (gl.starMap[i][j] > 0) {
int x = 110 + j * 4;
int y = 179 + i * 4;
g.setColor(setDiaColor(gl.starMap[i][j]));
g.fillRect(x, y, 4, 4); //画方块
}
}
}
}
}
//绘画需要完成的色块
private void drawRequireColor(Graphics g) {
int ColorCount = gl.checkColor.length;
int color;
for (int k = 0; k < ColorCount; k++) {
color=gl.checkColor[k];
if(color>0){
g.setColor(setDiaColor(color));
g.fillRect(19 + k * 11, 178, 8, 8);
}
}
}
//设置方块颜色:setDiaColor
private int setDiaColor(int color) {
int tmpColor = 0;
switch (color) {
case 1 : //white
tmpColor = 0xF5ECE0;
break;
case 2 : //red
tmpColor = 0xF56133;
break;
case 3 : //green
tmpColor = 0x00cc33;
break;
case 4 : //blue
tmpColor = 0x2677ff;
break;
case 5 : //yellow
tmpColor = 0xffbb00;
break;
case 6 : //red grey
tmpColor = 0xbb9999;
break;
case 7 : //green grey
tmpColor = 0x99bb99;
break;
case 8 : //blue grey
tmpColor = 0x9999bb;
break;
case 9 : //yellow grey
tmpColor = 0xddbb99;
break;
}
return tmpColor;
}
//暂停菜单
private void drawGameMenu(Graphics g){
int v=getHeight()-li.pausePageImg.getHeight()-40;
int h=8;
//background
g.drawImage(li.pausePageImg,h,v,20);
//底色
g.setColor(0x533D00);
g.fillRect(h+2,v+23+menuNum*18,96,18);
//文字
g.setColor(0xE4D7B3);
g.drawString("菜 单", h+18, v+2, 20);
g.drawString("保存进度", h+5, v+23, 20);
g.drawString("帮助", h+5, v+41, 20);
if(soundOpen)
g.drawString("声音"+"=>关", h+5, v+59, 20);
else
g.drawString("声音"+"=>开", h+5, v+59, 20);
g.drawString("返回主菜单", h+5, v+77, 20);
}
/**绘画过小关画面**/
private void passSubPage(Graphics g) {
int x,y;
if (stars[subLevel]) {
g.drawImage(li.starBigImg, 53, 21, 20);
//System.out.println("stars");
g.drawImage(li.starNumImg[starsCount() - 1], 84, 49, 20);
x=17;
y=102;
g.drawImage(li.passImg, x, y, 20);
} else {
x=17;
y=74;
g.drawImage(li.passImg, x, y, 20);
}
g.setColor(0xffcc00);
g.drawString("气血融通,", x+39, y+13, 20);
g.drawString("功力渐强。", x+39, y+31, 20);
}
//过关
private void passPage(Graphics g) {
g.drawImage(li.passImg, 17, 74, 20);
g.setColor(0xffcc00);
g.drawString("此级修炼已成,", 21, 86, 20);
g.drawString("练得大法指日可待。", 21, 104, 20);
}
//计算所有星星
private int starsCount(){
int starsCount = 0;
for(int i=0;i<20;i++){
if(stars[i])
starsCount++;
}
return starsCount;
}
//计算level分数
private int scoreCount(){
int scoreCount = 0;
for(int i=0;i<20;i++){
scoreCount=scoreCount+score[i];
}
return scoreCount;
}
//画按钮
private void drawButton(Graphics g,int x,int y,String s){
g.setColor(0x000000);
g.drawImage(li.buttonImg, x, y, 20);
g.drawString(s, x+4, y+2, 20);
}
/**按键控制(Key**/
protected void keyPressed(int keyCode) {
//OK键|leftSoft
if (keyCode == KEY_SOFTKEY3 || keyCode == KEY_SOFTKEY1) {
switch(gameState){
case GAME :
if(menuState==8){ //有菜单时
doGameMenu();//操作
}else if(menuState==9){ //无菜单时
menuState=8;
repaint();
}
break;
case SUBLEVEL ://进入游戏
gameState = GAME;
newGame();
repaint();
break;
case LEVEL ://进入小关选择
gotoSubLevel();
repaint();
break;
case INDEX :
if (menuState == 0) { //新游戏菜单&有记录
gameState=NEWGAME;
sd.deleteRS(); //先清空再建立
level=0;
//gotoSubLevel();
repaint();
}
if (menuState == 9) { //无选择时
doIndexMenu();
repaint();
}
break;
}
}
//rightSoft键(back)
if (keyCode == KEY_SOFTKEY2) {
switch(gameState){
case INDEX ://首页
if (menuState == 0) { //取消清除记录
menuState = 9;
repaint();
}
break;
case LEVEL://选关
gameState = INDEX;
menuState = 9;
menuNum=1;
repaint();
break;
case SUBLEVEL ://小关
gameState = LEVEL;
repaint();
break;
case GAME ://游戏
if(menuState==9){//到小关
gameState = SUBLEVEL;
repaint();
}else if(menuState==8){//到游戏
menuState=9;
repaint();
}
break;
case HELP ://帮助
if(menuState==8){//返回游戏
gameState=GAME;
}
if(menuState==9){//返回首页
gameState=INDEX;
}
scoll=0; //滚动条复原
repaint();
break;
case ABOUT ://关于
gameState=INDEX;
repaint();
break;
case SEELOG ://查看记录
menuState=9;
gameState=INDEX;
repaint();
break;
}
}
//*键重来
if (keyCode==42) {
if(gameState==GAME && menuState==9){
newGame();
repaint();
}
}
//方向键
if (keyCode == KEY_UP_ARROW || keyCode==KEY_NUM2) {
switch(gameState){
case INDEX:
if (menuNum > 0) //小于
menuNum--;
else
menuNum = 6; //到顶则为最后
repaint();
break;
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 - 5 >= 0) //小于
subLevel = subLevel - 5;
else
subLevel = subLevel + 15; //到顶则为最后
repaint();
break;
case HELP:
if (scoll > 0) //小于
scoll--;
repaint();
break;
case GAME:
if(menuState==9){ //控制方块
moveUp();
doCount++;
repaint();
}
if(menuState==8){ //菜单
if (menuNum > 0)//小于
menuNum --;
else
menuNum = 3; //到顶则为最后
repaint();
}
break;
}
}
if (keyCode == KEY_DOWN_ARROW || keyCode==KEY_NUM8) {
switch(gameState){
case INDEX:
if (menuNum < 6)//
menuNum++;
else
menuNum = 0; //到底则为0
repaint();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -