news 2026/4/23 13:17:53

手机端AIDE编译器安卓版推箱子游戏软件代码

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
手机端AIDE编译器安卓版推箱子游戏软件代码

java代码

```java

package com.example.boxpush;

import android.app.Activity;
import android.os.Bundle;
import android.view.Window;
import android.view.WindowManager;

public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 隐藏标题栏和状态栏,全屏显示游戏
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);

// 直接创建GameView并设置为界面,无需布局文件
GameView gameView = new GameView(this);
setContentView(gameView);
}
}


GameView.java代码

package com.example.boxpush;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Rect;
import android.view.MotionEvent;
import android.view.View;
import java.util.Random;

public class GameView extends View {
// 游戏元素:0=空地,1=墙,2=箱子,3=目标点,4=玩家
// 新增3个不同难度的关卡
private int[][][] levels = {
// 第一关(基础)
{
{1,1,1,1,1},
{1,3,2,0,1},
{1,0,0,4,1},
{1,0,2,3,1},
{1,1,1,1,1}
},
// 第二关(进阶)
{
{1,1,1,1,1,1},
{1,3,2,0,0,1},
{1,0,2,0,3,1},
{1,0,0,4,0,1},
{1,0,2,0,3,1},
{1,1,1,1,1,1}
},
// 第三关(复杂)
{
{1,1,1,1,1,1,1},
{1,3,0,0,2,0,1},
{1,0,2,0,3,0,1},
{1,0,0,4,0,0,1},
{1,0,2,0,3,0,1},
{1,0,0,0,0,0,1},
{1,1,1,1,1,1,1}
}
};
private int currentLevel = 0; // 当前选中关卡
private int[][] map; // 当前关卡地图
private int[][] originalMap; // 初始地图备份
private int playerX, playerY; // 玩家位置
private int cellSize;
private Paint paint;
private boolean isWin = false;
// 按钮区域:重新开始当前关、随机关卡、下一关
private Rect restartCurBtn, randomLevelBtn, nextLevelBtn;
private final int btnW = 200, btnH = 80;
private Random random = new Random();

public GameView(Context context) {
super(context);
paint = new Paint();
paint.setAntiAlias(true);
paint.setTextAlign(Paint.Align.CENTER);
initLevel(currentLevel); // 初始化当前关卡
}

/**
* 初始化指定关卡
*/
private void initLevel(int level) {
if (level >= levels.length) level = 0; // 超出则回到第一关
currentLevel = level;
map = copyMap(levels[level]);
originalMap = copyMap(levels[level]);
findPlayerPosition(); // 自动查找玩家位置
isWin = false;
invalidate();
}

/**
* 复制地图数组
*/
private int[][] copyMap(int[][] src) {
int[][] dst = new int[src.length][src[0].length];
for (int y = 0; y < src.length; y++) {
System.arraycopy(src[y], 0, dst[y], 0, src[y].length);
}
return dst;
}

/**
* 自动查找玩家初始位置
*/
private void findPlayerPosition() {
for (int y = 0; y < map.length; y++) {
for (int x = 0; x < map[y].length; x++) {
if (map[y][x] == 4) {
playerX = x;
playerY = y;
return;
}
}
}
}

@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
cellSize = Math.max(Math.min(w / map[0].length, h / map.length), 50);
// 初始化按钮位置(屏幕底部横向排列)
int btnY = h - btnH - 50;
restartCurBtn = new Rect(50, btnY, 50 + btnW, btnY + btnH);
randomLevelBtn = new Rect(w/2 - btnW/2, btnY, w/2 + btnW/2, btnY + btnH);
nextLevelBtn = new Rect(w - btnW - 50, btnY, w - 50, btnY + btnH);
}

@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
// 黑色背景
paint.setColor(getResources().getColor(R.color.black));
canvas.drawRect(0, 0, getWidth(), getHeight(), paint);

// 绘制游戏元素(居中显示)
int offsetX = (getWidth() - cellSize * map[0].length) / 2;
int offsetY = (getHeight() - cellSize * map.length) / 2;
for (int y = 0; y < map.length; y++) {
for (int x = 0; x < map[y].length; x++) {
int l = offsetX + x * cellSize;
int t = offsetY + y * cellSize;
int r = l + cellSize;
int b = t + cellSize;
int cx = (l + r) / 2, cy = (t + b) / 2;

switch (map[y][x]) {
case 1:
paint.setColor(getResources().getColor(R.color.wall));
canvas.drawRect(l, t, r, b, paint);
break;
case 2:
paint.setColor(getResources().getColor(R.color.box));
canvas.drawCircle(cx, cy, cellSize * 4 / 9, paint);
break;
case 3:
paint.setColor(getResources().getColor(R.color.target));
canvas.drawCircle(cx, cy, cellSize / 5, paint);
break;
case 4:
paint.setColor(getResources().getColor(R.color.player));
canvas.drawCircle(cx, cy, cellSize * 4 / 9, paint);
break;
}
}
}

// 通关提示+按钮
if (isWin) {
// 半透明遮罩
paint.setColor(0x99000000);
canvas.drawRect(0, 0, getWidth(), getHeight(), paint);
// 通关文字
paint.setColor(getResources().getColor(R.color.white));
paint.setTextSize(100);
canvas.drawText("恭喜通关!", getWidth()/2f, getHeight()/2f - 80, paint);
paint.setTextSize(50);
canvas.drawText("当前关卡:" + (currentLevel + 1), getWidth()/2f, getHeight()/2f - 10, paint);
// 绘制功能按钮
drawButtons(canvas);
}
}

/**
* 绘制通关后的功能按钮
*/
private void drawButtons(Canvas canvas) {
// 1. 重新开始当前关
paint.setColor(getResources().getColor(R.color.wall));
canvas.drawRoundRect(restartCurBtn.left, restartCurBtn.top, restartCurBtn.right, restartCurBtn.bottom, 15, 15, paint);
paint.setColor(getResources().getColor(R.color.white));
paint.setTextSize(30);
canvas.drawText("重玩当前", restartCurBtn.centerX(), restartCurBtn.centerY() + 10, paint);

// 2. 随机关卡
paint.setColor(getResources().getColor(R.color.box));
canvas.drawRoundRect(randomLevelBtn.left, randomLevelBtn.top, randomLevelBtn.right, randomLevelBtn.bottom, 15, 15, paint);
paint.setColor(getResources().getColor(R.color.white));
canvas.drawText("随机关卡", randomLevelBtn.centerX(), randomLevelBtn.centerY() + 10, paint);

// 3. 下一关(最后一关则置灰)
if (currentLevel < levels.length - 1) {
paint.setColor(getResources().getColor(R.color.target));
} else {
paint.setColor(getResources().getColor(R.color.teal_700));
}
canvas.drawRoundRect(nextLevelBtn.left, nextLevelBtn.top, nextLevelBtn.right, nextLevelBtn.bottom, 15, 15, paint);
paint.setColor(getResources().getColor(R.color.white));
canvas.drawText(currentLevel < levels.length - 1 ? "下一关" : "已通关", nextLevelBtn.centerX(), nextLevelBtn.centerY() + 10, paint);

// 恢复文字大小
paint.setTextSize(80);
}

@Override
public boolean onTouchEvent(MotionEvent e) {
if (e.getAction() == MotionEvent.ACTION_UP) {
float x = e.getX(), y = e.getY();
if (isWin) {
// 点击按钮逻辑
if (restartCurBtn.contains((int)x, (int)y)) {
initLevel(currentLevel); // 重玩当前关
} else if (randomLevelBtn.contains((int)x, (int)y)) {
initLevel(random.nextInt(levels.length)); // 随机选一关
} else if (nextLevelBtn.contains((int)x, (int)y) && currentLevel < levels.length - 1) {
initLevel(currentLevel + 1); // 下一关
}
return true;
}

// 玩家移动逻辑
float cx = getWidth()/2f, cy = getHeight()/2f;
if (Math.abs(x - cx) > Math.abs(y - cy)) {
move(x > cx ? 1 : -1, 0);
} else {
move(0, y > cy ? 1 : -1);
}
invalidate();
checkWin();
}
return true;
}

/**
* 玩家移动逻辑
*/
private void move(int dx, int dy) {
int nx = playerX + dx, ny = playerY + dy;
if (nx < 0 || nx >= map[0].length || ny < 0 || ny >= map.length || map[ny][nx] == 1) return;
if (map[ny][nx] == 2) {
int bx = nx + dx, by = ny + dy;
if (bx < 0 || bx >= map[0].length || by < 0 || by >= map.length || map[by][bx] != 0 && map[by][bx] != 3) return;
map[ny][nx] = 0;
map[by][bx] = 2;
}
map[playerY][playerX] = 0;
playerX = nx;
playerY = ny;
map[playerY][playerX] = 4;
}

/**
* 通关判定:所有箱子在目标点上
*/
private void checkWin() {
boolean win = true;
for (int y = 0; y < map.length; y++) {
for (int x = 0; x < map[y].length; x++) {
if (map[y][x] == 2 && originalMap[y][x] != 3) {
win = false;
break;
}
}
if (!win) break;
}
isWin = win;
}
}

activity_main.xml代码
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/black">

<com.example.boxpush.GameView
android:layout_width="match_parent"
android:layout_height="match_parent" />

</FrameLayout>


color.xml代码

<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="black">#FF000000</color>
<color name="white">#FFFFFFFF</color>
<color name="wall">#FF7B7B7B</color>
<color name="box">#FFFFA500</color>
<color name="target">#FF00FF00</color>
<color name="player">#FFFF0000</color>
<color name="purple_200">#FFBB86FC</color>
<color name="purple_500">#FF6200EE</color>
<color name="purple_700">#FF3700B3</color>
<color name="teal_200">#FF03DAC5</color>
<color name="teal_700">#FF018786</color> <!-- 仅保留这一行teal_700 -->
</resources>


AndroidManifest.xml代码

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.boxpush">
<application
android:label="推箱子"> <!-- 移除android:icon="@drawable/ic_launcher" -->
<activity
android:name=".MainActivity"
android:label="推箱子">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>

```

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 9:39:13

扩散Transformer架构深度解析:三大模型性能对比与技术演进路径

扩散Transformer架构深度解析&#xff1a;三大模型性能对比与技术演进路径 【免费下载链接】minisora 项目地址: https://gitcode.com/GitHub_Trending/mi/minisora 在AI图像生成技术快速发展的浪潮中&#xff0c;扩散Transformer架构凭借其强大的生成能力和灵活的设计…

作者头像 李华
网站建设 2026/4/23 9:39:13

Kotaemon罕见病查询:孤勇者的希望之光

请提供符合以下技术领域的博文内容&#xff1a; 涉及特定芯片&#xff08;如STM32、TPS543x、PCM5102&#xff09; 包含协议标准&#xff08;如IS、SPI、CAN、USB Audio&#xff09; 聚焦电源设计&#xff08;如Buck/Boost转换器、LDO选型&#xff09; 关联音频硬件&#x…

作者头像 李华
网站建设 2026/4/23 9:41:12

零基础玩转I2S:用快马制作你的第一个数字音频项目

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 设计一个入门级I2S音频实验项目&#xff0c;使用Raspberry Pi Pico开发板。要求&#xff1a;1) 通过按钮控制音频录制/播放 2) LED显示工作状态 3) 保存音频到SD卡 4) 提供完整接线…

作者头像 李华
网站建设 2026/4/23 9:43:14

基于深度学习的穿戴识别系统设计与实现

基于深度学习的穿戴识别系统设计与实现 1. 项目概述 本系统是一个基于深度学习&#xff08;YOLOv8&#xff09;与 Web 技术&#xff08;Django Vue3&#xff09;相结合的智能安全检测平台。本项目旨在解决工业现场及特定场所的安全规范管理问题&#xff0c;以帽子&#xff08;…

作者头像 李华
网站建设 2026/4/19 10:37:04

FaceFusion批量处理上万张图片的工程化实践

FaceFusion批量处理上万张图片的工程化实践 在影视修复项目中&#xff0c;团队曾面临一项棘手任务&#xff1a;将一位已故演员的脸部特征逐帧迁移到老电影的高清扫描版中&#xff0c;共涉及2.7万帧图像。原始方案使用单机脚本逐张处理&#xff0c;预估耗时超过80小时——这还只…

作者头像 李华
网站建设 2026/4/23 9:13:55

使用Kotaemon构建垂直领域Chatbot的五大步骤

使用Kotaemon构建垂直领域Chatbot的五大步骤 在企业服务智能化浪潮中&#xff0c;一个共性的挑战浮现&#xff1a;如何让AI真正“懂业务”&#xff1f;通用大模型虽然能对答如流&#xff0c;但在医疗问诊、保险理赔或法律咨询这类专业场景下&#xff0c;常常因缺乏上下文理解与…

作者头像 李华