Java编写推箱子小游戏

题目如下:

 

import java.util.Locale;
import java.util.Scanner;

public class 推箱子 {
    private static String getFormatLogString(String content, int colour, int type){
        boolean hasType = type != 1 && type != 3 && type != 4;
        if (hasType) {
            return String.format("\033[%dm%s\033[0m", colour, content);
        } else {
            return String.format("\033[%d;%dm%s\033[0m", colour, type, content);
        }
    }
    public static void main(String[] args) {{
}
        char[][] arr = new char[8][10];
        Scanner sc = new Scanner(System.in);
        int x = 1, y = 1;
        int i, j;
        int num = 0;
        boolean flag = false;
        for (i = 0; i < arr.length; i++) {
            for (j = 0; j < 10; j++) {
                if (i == 0 || i == 7) {
                    arr[i][j] = 'H';
                } else if (j == 0 || j == 9) {
                    arr[i][0] = arr[i][9] = 'H';
                } else arr[i][j] = ' ';
            }
        }
        arr[1][3] = arr[2][3] = arr[3][3] = arr[5][4] = arr[6][4] = arr[2][5] = 'H';
        arr[3][5] = arr[5][5] = arr[3][6] = arr[5][6] = arr[3][8] = arr[4][8] = 'H';
        arr[x][y] = 'o'; //人的位置
        arr[2][2] = '$'; //箱子的位置
        arr[6][5] = '*'; //终点的位置
        while (true) {
             System.out.println("----------------"); //初始地图
            for (i = 0; i < arr.length; i++) {
                for (j = 0; j < 10; j++) {
                    if (arr[i][j] == 'H') { //颜色设置
                        System.out.print(getFormatLogString(" H", 31, 0));
                    } else if (arr[i][j] == 'o') {
                        System.out.print(getFormatLogString(" o",32, 0));
                    } else if (arr[i][j] == '$') {
                        System.out.print(getFormatLogString(" $", 33, 0));
                    } else if (arr[i][j] == '*') {
                        System.out.print(getFormatLogString(" *", 34, 0));
                    } else {
                        System.out.print("  ");
                    }
                }
                System.out.println();
            }
                System.out.println("----------------");
            if (flag) {
                break;
            }
            System.out.println();
            // System.out.println("A上移,D左移,W右移,S下移");
            String code = sc.nextLine();
            switch (code.toLowerCase(Locale.ROOT)) {
                case "a":
                    if (arr[x][y - 1] == ' ') {
                        arr[x][y] = ' '; //人左边为空地
                        arr[x][y - 1] = 'o';
                        y--;
                        num++;
                    } else if (arr[x][y - 1] == '$') {  //人左边为箱子
                        if (arr[x][y - 2] != 'H') {     //箱子左边为空地
                            if (arr[x][y - 2] == '*') { //箱子左边为目的地
                                flag = true;
                                num++;
                            }
                            arr[x][y] = ' ';
                            arr[x][y - 1] = 'o';
                            arr[x][y - 2] = '$';
                            y--;
                            num++;
                        }
                    }
                    break;
                case "s":
                    if (arr[x + 1][y] == ' ') {
                        arr[x][y] = ' '; //人下边为空地
                        arr[x + 1][y] = 'o';
                        x++;
                        num++;
                    } else if (arr[x + 1][y] == '$') {  //人下边为箱子
                        if (arr[x + 2][y] != 'H') {     //箱子下边为空地
                            if (arr[x + 2][y] == '*') { //箱子下边为目的地
                                flag = true;
                                num++;
                            }
                            arr[x][y] = ' ';
                            arr[x + 1][y] = 'o';
                            arr[x + 2][y] = '$';
                            x++;
                            num++;
                        }
                    }
                    break;
                case "d":
                    if (arr[x][y + 1] == ' ') {
                        arr[x][y] = ' '; //人右边为空地
                        arr[x][y + 1] = 'o';
                        y++;
                        num++;
                    } else if (arr[x][y + 1] == '$') {  //人右边为箱子
                        if (arr[x][y + 2] != 'H') {     //箱子右边为空地
                            if (arr[x][y + 2] == '*') { //箱子右边为目的地
                                flag = true;
                                num++;
                            }
                            arr[x][y] = ' ';
                            arr[x][y + 1] = 'o';
                            arr[x][y + 2] = '$';
                            y++;
                            num++;
                        }
                    }
                    break;
                case "w":
                    if (arr[x - 1][y] == ' ') {
                        arr[x][y] = ' '; //人上边为空地
                        arr[x - 1][y] = 'o';
                        x--;
                        num++;
                    } else if (arr[x - 1][y] == '$') {  //人上边为箱子
                        if (arr[x - 2][y] != 'H') {     //箱子上边为空地
                            if (arr[x - 2][y] == '*') { //箱子上边为目的地
                                flag = true;
                                num++;
                            }
                            arr[x][y] = ' ';
                            arr[x - 1][y] = 'o';
                            arr[x - 2][y] = '$';
                            x--;
                            num++;
                        }
                    }
                    break;
                default:
                    System.out.println("请输入有效指令!");
            }
        } System.out.println("游戏结束!您一共走了" + (num-1) + "步。");
        sc.close();
    }
}

结果如下:

初学Java,欢迎大佬们指教! 

 

基于JAVA推箱子游戏设计软件程序源码+word毕业论文文档. 基于JAVA推箱子游戏系统主要用于实现游戏推箱子功能,提供多种不同难度的关卡。本系统结构如下: (1)初始化模块: 该模块包括屏幕初始化和游戏第一关的初始化。屏幕初始化用于输出欢迎信息和操 (2)画图模块: 该模块主要是被其它模块调用,用于画墙、在空地画箱子、在目的地画箱子、画小人和画目的地。 (3)移动箱子模块: 该模块用于移动箱子,包括目的地之间、空地之间和目的地与空地之间的箱子移动。 (4)移动小人模块: 该模块用于控制小人移动,从而推动箱子到目的地。 (5)功能控制模块: 该模块是几个功能函数的集合,包括屏幕输出功能、指定位置状态判断功能和关卡重置功能。 目 录 摘 要 i Abstract ii 引 言 1 1 系统分析 2 1.1 技术可行性分析 2 1.1.1 可行性目的 2 1.1.2 可行性研究前提 2 1.1.3 算法可行性分析 2 1.1.4 平台选择 6 1.2 需求分析 6 1.2.1 引言 6 1.2.2 游戏需求 6 1.2.3 软硬件需求 9 1.2.4 接口控制 10 1.3 方案论证 10 1.3.1 C++语言的优点 10 1.3.2 Java语言的优点 11 1.3.3 C语言的优点 13 1.3.4 方案选择 14 2 概要设计 16 2.1 游戏设计分析 16 2.1.1 地图文件的引用 18 2.1.2 程序运逻辑 19 2.1.3 绘图 20 2.1.4 显示平台 22 2.2 注意事项 24 2.3 游戏流程图 24 2.4 函数模型 25 3 详细设计 28 3.1 游戏总体结构与代码 28 3.2 选关模块 29 3.3 地图的绘制形成 30 3.4 小人与箱子移动的算法 31 3.5 小人上下移动模块 33 3.6 悔棋模块 34 3.7 音乐控制 35 4 游戏测试 38 4.1 软件测试 38 4.1.1 软件测试简介 38 4.2 测试方法 38 4.3 测试步骤 38 4.4 游戏系统性能分析 41 5 项目经验与总结 42 6 参考文献 44 7 致谢 45 8 外文原文及中文翻译 46 引 言 策略性游戏可以锻炼人的思维能力还能缓解人的压力,使人们暂时忘却生活当中的烦恼,增强人们的逻辑思维能力,游戏的艺术美也吸引着越来越多的玩家和厂商,寓教于乐,在放松人们心情的同时还可以活跃双手。在人类的社会生活当中,游戏占有很大的比重,并且随着社会的发展而不断发展。而且游戏本身具有激发人类潜在行为的特质,是一种能够吸引人们参与其中的活动,其本身具有强烈的吸引力使游戏者卷入其中;再者适当的游戏、合理的时间安排,能够让玩家在娱乐的同时还可以锻炼其反应速度及灵敏程度,亦可让玩家从压力中释放出来。因此游戏逐渐成为人们生活中不可缺少的一部分,游戏产业也正逐步发展成熟。 经典的推箱子游戏是一个来自日本的古老游戏,目的是在训练你的逻辑思考能力。它的玩法也非常简单,在一个狭小的仓库中,要求把木箱放到指定的位置,稍不小心就会出现箱子无法移动或者通道被堵住的情况,所以需要巧妙的利用有限的空间和通道,合理安排移动的次序和位置,控制人物不停的移动将箱子推到目的位置才能顺利的完成任务。难点在于移动的位置,以及箱子到达指定位置的顺序,只有多加思考才能获得游戏的胜利。反复推敲,锻炼了人们的耐性。本次的开发尽量多的设置了关卡数目,增强游戏的耐玩性,同时在画面上有所提高,借鉴了许多达人的经验和技术,引发了我对游戏的热爱,丰富了个人生活,相信推箱子游戏在今后的社会总会越来越引人注目。 1 系统分析 1.1 技术可行性分析 1.1.1 可行性目的 通过推箱子游戏中使用的Java技术,让我能够更加熟练的使用Eclipse。同时了解相关运行环境的配置。将理论知识和实际操作结合起来。达到学以致用的目的。网上资料的查询极大的提高了我的自学能力。希望经过此次设计,锻炼自己的思考,解决问题的能力。对系统开发的流程有更深层次的理解,检验学习成果和实际动手能力,对底层知识有更深的了解。为今后的工作打好基础。 1.1.2 可行性研究前提 基本需求:通过规范的开发流程,采用面向对象的分析设计方法实现游戏美观,易玩,及时等特性。操作性方面主要通过键盘的借口实现,操作键位是上下左右。 主要开发目标:通过此次研究熟练Java的相关知识和技术的应用,界面美化的工作需要同学的帮助,了解团队和合作的重要,熟悉不同领域相关技术
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值