建议在Eclipse中运行,控制台输出可能会出现排版问题。

Eclipse控制台字号建议为小四。

程序运行截图:

程序源代码:

import java.util.Random;
import java.util.Scanner;
/**
* Eliminate - 十二生肖版本    版本号 1.3.1
* @author CSDN-Spixii
* 2016-8-19
*/
public class Eliminate {
public static void main(String[] args){
Random ra = new Random();
Scanner sc = new Scanner(System.in);
/* 运算变量定义 */
int arrSize;//后设-矩阵尺寸
int chNum;//后设-字符类型数量
int point = 0;//回合计分
int totalPoints = 0;//总分
int life = 0;//设置 - 生命值
int time = 0;//回合数
int tempInt = 0;//测试 - 行列号
int testTime = -1;//测试 - 运算次数
boolean pass;//判断消除完成
int bomb;//炸弹累计
boolean start = true;//判断游戏是否开始
boolean delay = true;//开关 - 延时特效
boolean test = false;//开关 - 测试模式
if(test){delay = false;}//测试模式禁用延时效果
if(test){life = 100000;}//测试模式解除生命限制
/* 交互变量定义 */
int num1 = 0;//行列数1
int num2 = 0;//行列数2
int h1 = 0;//行数1
int l1 = 0;//列数1
int h2 = 0;//行数2
int l2 = 0;//列数2
String tempExchange = "";//元素临时交换用
System.out.println("=====================");
System.out.println("    - Eliminate -    ");
System.out.println("=====================\n");
if(test){System.out.println("    - Test Mode -    \n");}
/* 游戏属性设置 */
while(true){
System.out.print("> 请设置矩阵尺寸[3~10]:");
arrSize = Integer.parseInt(sc.next());//设置-矩阵大小[3~10]
if(arrSize<3 || arrSize>10){
System.out.println("*设定范围外的输入!");
continue;
}
System.out.print("> 请设置游戏难度[3~12]:");
chNum = Integer.parseInt(sc.next());//设置-游戏难度/字符类型数 [3~12]
System.out.println();
if(chNum<3 || chNum>12){
System.out.println("*设定范围外的输入!");
continue;
}
break;
}
/* 创建游戏矩阵 */
String [][]arr = new String [arrSize][];
for(int i=0; ij-3; k--){//元素下落 - x轴遍历
for(int l=i; l>0; l--){//元素下落 - y轴操作
arr[l][k] = arr[l-1][k];//元素下落
}
}
/* 顶部补充元素 */
arr[0][j] = getCharacter(ra.nextInt(chNum),true);
arr[0][j-1] = getCharacter(ra.nextInt(chNum),true);
arr[0][j-2] = getCharacter(ra.nextInt(chNum),true);
if(test){System.out.println("X轴出现消除,行号:"+i);}
point ++;
pass = false;
/* 横向触发爆炸检测-触发点数:6 */
int tempI = 0;
if(!start && i>0){//扫描坠落天花板/主动碰撞触发
tempI = i;
for (int k=j-2; k2; l--){//元素下落 - x轴操作
arr[l][j] = arr[l-3][j];//元素下落
}
/* 顶部补充元素 */
arr[0][j] = getCharacter(ra.nextInt(chNum),true);
arr[1][j] = getCharacter(ra.nextInt(chNum),true);
arr[2][j] = getCharacter(ra.nextInt(chNum),true);
if(test){System.out.println("Y轴出现消除,列号:"+j);}
point ++;
pass = false;
/* 纵向触发爆炸检测-触发点数:2 */
int tempI = 0;
if(!start && i-2>0){//炸点不在地板时/主动碰撞触发
tempI = i;
if(!start && detonate(arr,tempI,j,arrSize)){//碰撞位 上一点 炸弹检测
point ++;
bomb ++;
printArray(arr,arrSize,delay);
//元素下落
elementsFall(arr, chNum);
//break;
}
}
if(!start && i<9){//炸点不在天花板时/被动碰撞触发
tempI = i+1;
if(!start && detonate(arr,tempI,j,arrSize)){//碰撞位 下一点 炸弹检测
point ++;
bomb ++;
printArray(arr,arrSize,delay);
//元素下落
elementsFall(arr, chNum);
//break;
}
}
}else{
temp2 = temp1;
temp1 = arr[i][j];
}
}else{
temp1 = arr[i][j];
temp2 = "";
}
}
}
}while(!pass);
if(test){System.out.println("\ntestTime:"+testTime+"  tempInt:"+tempInt+"  bomb:"+bomb+"\n");}
/* 分数计算与结束判断 */
if(start){//判断是否刚刚开始
totalPoints = 0;
point = 0;
start = false;
}else{
if(point == 0){
life --;
//tempExchange = arr[h1][l1];//高生命值-交换返回
//arr[h1][l1] = arr[h2][l2];
//arr[h2][l2] = tempExchange;
if(life == -1){
System.out.println("=====[GAME OVER]=====");
System.out.println("总分:"+totalPoints+"      回合:"+time);  //运算次数测试
System.out.println("=====================");
sc.close();
return;
}
}
totalPoints += point;
if(delay){for(int t=0; t<10000000; t++){}}//延时特效
System.out.println("=====================");
if(delay){for(int t=0; t<500000000; t++){}}//延时特效
System.out.println(" 得分:"+point+"   总分:"+totalPoints+"   回合:"+time);  //运算次数测试
if(delay){for(int t=0; t<500000000; t++){}}//延时特效
System.out.println("=====================");
if(delay){for(int t=0; t<500000000; t++){}}//延时特效
}
/* 交互 - 显示矩阵 */
printArray(arr,arrSize,delay);
/* 交互 - 用户输入 */
while(true){
num1 = importOperand(1,arrSize);
num2 = importOperand(2,arrSize);
if(num1==num2){
System.out.println("*请勿输入相同的行列数!");
continue;
}
//响应操作
h1 = num1/10;
l1 = num1%10;
h2 = num2/10;
l2 = num2%10;
if(test||((h1 == h2)&&(l1-l2 == -1||l1-l2 == 0||l1-l2 == 1))||((l1 == l2)&&(h1-h2 == -1||h1-h2 == 0||h1-h2 == 1))){
tempExchange = arr[h1][l1];//交换
arr[h1][l1] = arr[h2][l2];
arr[h2][l2] = tempExchange;
time ++;
System.out.println();
break;
}else{
System.out.println("*请输入相邻的元素行列数!");
continue;
}
}
}/* -restart-*/
}
/**
* 用户输入
* @param id    //形参
* @return int
*/
@SuppressWarnings("resource")//解除Scanner无关闭警告
static int importOperand(int id, int arrSize){
int num;//输入数字
while(true){
Scanner sc = new Scanner(System.in);
System.out.print("> 请输入元素"+id+"的行列号:");
num = Integer.parseInt(sc.next());
if(num/100>0){
System.out.println("*错误的输入!请输入两个字节");
continue;
}
int h = num/10;
int l = num%10;
if(h>=arrSize || l>=arrSize){
System.out.println("*错误的输入!请输入矩阵范围内的行列数");
continue;
}
return num;
}
}
/**
* 打印矩阵
* @param arr
* @param arrSize
* @param delay
*/
static void printArray(String[][] arr, int arrSize, boolean delay){
System.out.print("  0 1 2");//行号
for(int i=0; i0){
arr[x-1][y] = strX;
if(y>0){arr[x-1][y-1] = strX;}
if(y0){arr[x+1][y-1] = strX;}
if(y0){arr[x][y-1] = strX;} if(y0; i--){ arr[i][x] = arr[i-1][x]; } arr[0][x] = charX;// } } } for(int i=0; i


使用到的Java基础知识点:

  1. Random
  2. Scanner
  3. String处理
  4. 静态方法使用
  5. 二维数组操作
  6. 多重循环嵌套与处理

实现的功能:

  1. 随机生成二维矩阵
  2. 控制台输入设置矩阵大小(游戏尺寸)与元素种类(游戏难度)
  3. 横向与纵向检测消除项目(三连消除)
  4. 消除后的元素下落
  5. 四种类型炸弹 (纵:纵向爆破、横:横向爆破、鬼:3*3矩阵爆破、神:十字爆破)
  6. 延时“特效”
  7. 测试模式

*如运行过程中出现异常抛出,请将异常发至文章评论_(:з」∠)_

【小游戏】 Eliminate相关推荐

  1. 【附源码】Python小游戏 ——开心消消乐

    目录 前言 开发工具 环境搭建 效果展示 选择关卡首页 游戏界面 过关 代码展示 模块导入 主函数 声音类 树类 元素类 数组类 前言 今天主要是给大家拿牌一个小游戏,开心消消乐 看看有没有小伙伴能够 ...

  2. 自制青蛙跳台阶小游戏~

    青蛙跳台阶小游戏 1.概念(concept)文档 楔子(Setting):千百年来,人们在贬低别人时,常用井底之蛙来描述那个人,但这却让青蛙不开心了,于是青蛙决定跳出井底,为自己讨一个公道. 玩法(G ...

  3. 用Construct 2制作入门小游戏~

    今天在软导课上了解到了Construct 2这个神器,本零基础菜鸟决定尝试做一个简单的小游戏(实际上是入门的教程啊= = 首先呢,肯定是到官网下载软件啊,点击我下载~ 等安装完毕后我便按照新手教程开始 ...

  4. [FaceBook]测试、发布和分享小游戏

    FaceBook小游戏 测试.发布和分享小游戏 对于小游戏,您现在可以十分轻松地在本地测试开发版本,自动完成发布流程,以及与团队分享编译版本.本文档会详细说明这些步骤. 通过本地服务器测试游戏 小游戏 ...

  5. OPPO小游戏vConsole开启方法

    OPPO小游戏是不会报红色错误的,要开启vConsole,要在首场景脚本内onLoad里加上以下代码: qg.setEnableDebug({enableDebug: true, // true 为打 ...

  6. unity课设小游戏_Unity制作20个迷你小游戏实例训练视频教程

    本教程是关于Unity制作20个迷你小游戏实例训练视频教程,时长:20小时,大小:3.8 GB,MP4高清视频格式,教程使用软件:Unity,附源文件,作者:Raja Biswas,共97个章节,语言 ...

  7. python井字棋_用Python做一个井字棋小游戏

    井字棋是一个经典的小游戏,在九宫格上玩家轮流画OXO,当每列或每行或是两个对角成一线时便是获胜. 今天就用Python编写一个井字棋小游戏,与电脑对战. 程序执行画面如下图所示: 程序提供了两种人工智 ...

  8. 用c++写一个猜数字的小游戏

    代码都很简单,就不细细说了,值得注意的一些就是: 对于初学c++的小伙伴来说,c++很多基础东西都和c语言有着一定的区别,例如头文件的写法,读入和输出的写法都不一样.例如下面这个小游戏中囊括了time ...

  9. 【机器视觉案例】(6) AI视觉,距离测量,自制AI小游戏,附python完整代码

    各位同学好,今天和大家分享一下如何使用 opencv + mediapipe 创建一个AI视觉小游戏,先放图看效果. 游戏规则,用手按下屏幕上的圆形按钮,每按一次后松开,按钮就随机出现在屏幕上的一个位 ...

  10. 微信小游戏创业,究竟是红海还是死海?

    "跳一跳"."弹球王者"."海盗来了"."斗地主"等等微信小游戏,你是不是很眼熟呢?这些都是前段时间被刷了屏的小游戏,以 ...

最新文章

  1. 丹佛斯变频器模拟量速度输入_变频器与PLC是如何协同作战的?了解这几个控制方式很有必要...
  2. 大学计算机基础章节知识点,《大学计算机基础》知识点
  3. Python 下载的九种方法
  4. 【Matlab】你想知道在图表标题中显示变量的一切
  5. Spring Cloud Alibaba基础教程:支持的几种服务消费方式(RestTemplate、WebClient、Feign)
  6. Flutter-现有iOS工程引入Flutter
  7. Jartto: 如何成为一名合格的技术面试官?
  8. ERROR 1130: Host '192.168.1.3' is not allowed to c
  9. 学习笔记(2):uni-app实战社区交友类app开发-引入css动画库
  10. 【信息系统项目管理师】第十五六章 配置管理和标准化
  11. python 搭建服务器
  12. Docker官方文档学习笔记(二):Docker Desktop入门
  13. codevs 4939 欧拉函数
  14. 中台能力是什么?PaaS是什么?微服务是什么?
  15. 科目二考试技巧全总结
  16. phpcms v9 栏目伪静态完全自定义为栏目英文目录名
  17. IDA使用初探-1.启动IDA
  18. 以色列农业里的生态性-丰收节贸易会:在死海谋定活水
  19. STM32CubeMX | 基于STM32使用HAL库硬件SPI驱动WK2124一拖四SPI转四路串口芯片
  20. ArrayMap 源码的详细解析

热门文章

  1. OpenGL绘图函数汇总
  2. 身体训练 (概率论)
  3. UEFI开发探索81- YIE002USB开发板(04 制作HID设备)
  4. 网易云信携手铢铢 App,率先提出「免费婚恋模式」:谈情说爱就应该免费!
  5. 一篇文章了解保偏光纤原理、快慢轴、保偏拍长、消光比
  6. iOS 判断日期是否是今天
  7. html网络流量监控,Mrtg 网络流量监控
  8. 自考java分数比_自考成绩作业5是什么意思每个考生的分数都是这样吗
  9. Docker实现原理/容器原理(LXC,Cgroups,Docker)
  10. html文本框同步,同步组合框HTML文本框与