返学费网 > 培训机构 > 游戏设计交流中心

13081913316

全国统一学习专线 8:30-21:00

在异世界开迷宫无代码

编程技能、游戏设计技能、数学和物理知识。
1、发迷宫需要编写代码,因此需要掌握至少一种编程语言,常见的编程语言包括Python、Java、C等。
2、开发迷宫需要设计游戏规则、关卡等。
3、迷宫中可能涉及到物理模拟、碰撞检测等问题,因此需要具备一定的数学和物理知识。

急求大佬帮忙写一下java程序

递归的话就是深度优先搜索(可以理解成不撞南墙不回头,撞了墙就原路返回)可以加上剪枝(就是做标记,如果之前某一次走过但不通的路下次再走到就不用走了)
用栈的话应该是广度优先搜索(大概就是分裂无数个你,每次向所有方向走一步),不过广搜要用队列实现,用栈本质还是深搜了
具体算法可以搜百度

JAVA走迷宫小游戏

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import javax.swing.event.*;
class JPanelEa1 extends JFrame ,
{
JPanel mainp,p1,p2,p3,p4;
jt1;
JMenuItem mnuCopy;
JMenuItem mnuPaste;
JButton bM;
boolean isDouble = false;// 是否为实数
int opFlag = -1;
static double t1 = 0, t2 = 0, t3 = 0, result = 0;
static int opflag1 = -1, opflag2 = -1, flag = 0, resflag = 1;
int preOp, currentOp = 0;// 标准位
double op1 = 0, op2 = 0;// 操作数
double n3;
buf = new (20);
copyBoard = new (20);// 剪贴板
memory = new (20);// M系列
str = new ();

public JPanelEa1()
{
p1=new JPanel();
p1.setLayout(new (2,1,10,10));
JMenuBar =new JMenuBar();
JMenu mnuEdit=new JMenu("编辑(E)");
mnuEdit.(KeyEvent.VK_E);
JMenu mnuCheck=new JMenu("查看(V)");
mnuCheck.(KeyEvent.VK_V);
JMenu mnuHelp=new JMenu("帮助(H)");
mnuCopy=new JMenuItem("复制(C)");
mnuPaste=new JMenuItem("粘贴(P)");
JMenuItem mnuVisit=new JMenuItem("查看帮助(V)");
JMenuItem mnuAbout=new JMenuItem("关于计算器(A)");
sep=new ();
jt1=new ("0.");
jt1.(false);
jt1.(.RIGHT);
mnuEdit.(this);
mnuCheck.(this);
mnuHelp.(this);
mnuCopy.(this);
mnuPaste.(this);
mnuVisit.(this);
mnuAbout.(this);
.add(mnuEdit);
.add(mnuCheck);
.add(mnuHelp);
mnuEdit.add(mnuCopy);
mnuEdit.add(mnuPaste);
mnuEdit.add(sep);
mnuHelp.add(mnuVisit);
mnuHelp.add(sep);
mnuHelp.add(mnuAbout);
p1.add();
p1.add(jt1);
p2=new JPanel();
p2.setLayout(new (.CENTER));
bM = new JButton(" ");
bM.(false);
p2.add(bM);
Button b25=new Button("Backspace");
b25.(this);
Button b26=new Button("CE");
b26.(this);
Button b27=new Button("C");
b27.(this);
p2.add(b25);
p2.add(b26);
p2.add(b27);
p3=new JPanel();
p3.setLayout(new (4,6));
Button button1=new Button("MC");
button1.(this);
Button button2=new Button("7");
button2.(this);
Button button3=new Button("8");
button3.(this);
Button button4=new Button("9");
button4.(this);
Button button5=new Button("/");
button5.(this);
Button button6=new Button("sqrt");
button6.(this);
Button button7=new Button("MR");
button7.(this);
Button button8=new Button("4");
button8.(this);
Button button9=new Button("5");
button9.(this);
Button button10=new Button("6");
button10.(this);
Button button11=new Button("*");
button11.(this);
Button button12=new Button("%");
button12.(this);
Button button13=new Button("MS");
button13.(this);
Button button14=new Button("1");
button14.(this);
Button button15=new Button("2");
button15.(this);
Button button16=new Button("3");
button16.(this);
Button button17=new Button("-");
button17.(this);
Button button18=new Button("1/x");
button18.(this);
Button button19=new Button("M+");
button19.(this);
Button button20=new Button("0");
button20.(this);
Button button21=new Button("+/-");
button21.(this);
Button button22=new Button(".");
button22.(this);
Button button23=new Button("+");
button23.(this);
Button button24=new Button("=");
button24.(this);
p3.add(button1);p3.add(button2);
p3.add(button3);p3.add(button4);
p3.add(button5);p3.add(button6);
p3.add(button7);p3.add(button8);
p3.add(button9);p3.add(button10);
p3.add(button11);p3.add(button12);
p3.add(button13);p3.add(button14);
p3.add(button15);p3.add(button16);
p3.add(button17);p3.add(button18);
p3.add(button19);p3.add(button20);
p3.add(button21);p3.add(button22);
p3.add(button23);p3.add(button24);
setSize(250,150);
mainp=new JPanel();
mainp.setLayout(new (3,1));
mainp.add(p1);
mainp.add(p2);
mainp.add(p3);
(mainp);
setTitle("计算器");
setSize(300,300);
(true);
(EXIT_ON_CLOSE);
}
public void ( e)
{
String s= e.();
if (s.equals("复制(C)")) {
String temp = jt1.getText().trim();
copyBoard.replace(0, copyBoard.length(), temp);
mnuPaste.(true);
} else if (s.equals("粘贴(p)")) {
jt1.setText(copyBoard.toString());
} else if (s.equals("CE")) {
// 如果是CE则清除文本框
jt1.setText("0.");
} else if (s.equals("Backspace")) {
if (!jt1.getText().trim().equals("0.")) {
// 如果文本框中有内容
if (str.length() != 1 && str.length() != 0) {
jt1.setText(str.delete(str.length() - 1, str.length())
.toString());
} else {
jt1.setText("0.");
str.setLength(0);
}
}
op2 = Double.(jt1.getText().trim());
} else if (s.equals("C")) {
// 如果是C删除当前计算
jt1.setText("0.");
op1 = op2 = 0;
str.replace(0, str.length(), " ");
preOp = currentOp = 0;
} else if (s.equals("MC")) {
// 如果是MC则清除缓冲区
String temp = "";
memory.replace(0, memory.length(), temp);
bM.setText(" ");
} else if (s.equals("MR")) {
// 如果按键为MR则恢复缓冲区的数到文本框
jt1.setText(memory.toString());
} else if (s.equals("MS")) {
// 如果按键为MS则将文本框的数存入缓冲区
String s1 = jt1.getText().trim();
memory.replace(0, memory.length(), s1);
bM.setText("M");
} else if (s.equals("M+")) {
// 如果按键为MS则将文本框值与缓冲区的数相加但不显示结果
String temp1 = jt1.getText().trim();
double dtemp = Double.(temp1);
String temp2 = memory.toString();
dtemp += Double.(temp2);
temp1 = String.valueOf(dtemp);
memory.replace(0, memory.length(), temp1);
} else if (s.equals("1/x")) {
// 如果按键为1/x则将文本框中的数据为它的倒数
String temp = jt1.getText().trim();
double dtemp = Double.(temp);
jt1.setText("" + 1 / dtemp);
} else if (s.equals("sqrt")) {
// 如果按键为sqrt则将文本框中的内容求平方根
String temp = jt1.getText().trim();
double dtemp = Double.(temp);
jt1.setText("" + Math.sqrt(dtemp));
} else if (s.equals("+")) {
str.setLength(0);
if (currentOp == 0) {
preOp = currentOp = 1;
op2 = 0;
jt1.setText("" + op1);
} else {
currentOp = preOp;
preOp = 1;
switch (currentOp) {
case 1:
op1 += op2;
jt1.setText("" + op1);
break;
case 2:
op1 -= op2;
jt1.setText("" + op1);
break;
case 3:
op1 *= op2;
jt1.setText("" + op1);
break;
case 4:
op1 /= op2;
jt1.setText("" + op1);
break;
}
}
} else if (s.equals("-")) {
str.setLength(0);
if (currentOp == 0) {
preOp = currentOp = 2;// op1=op2;op2=0;
jt1.setText("" + op1);
} else {
currentOp = preOp;
preOp = 2;
switch (currentOp) {
case 1:
op1 = op1 + op2;
jt1.setText("" + op1);
break;
case 2:
op1 = op1 - op2;
jt1.setText("" + op1);
break;
case 3:
op1 = op1 * op2;
jt1.setText("" + op1);
break;
case 4:
op1 = op1 / op2;
jt1.setText("" + op1);
break;
}
}
} else if (s.equals("*"))// *
{
str.setLength(0);
if (currentOp == 0) {
preOp = currentOp = 3;// op1=op2;op2=1;
jt1.setText("" + op1);// op1=op2;
} else {
currentOp = preOp;
preOp = 3;
switch (currentOp) {
case 1:
op1 = op1 + op2;
jt1.setText("" + op1);
break;
case 2:
op1 = op1 - op2;
jt1.setText("" + op1);
break;
case 3:
op1 = op1 * op2;
jt1.setText("" + op1);
break;
case 4:
op1 = op1 / op2;
jt1.setText("" + op1);
break;
}
}
} else if (s.equals("/"))// /
{
str.setLength(0);
if (currentOp == 0) {
preOp = currentOp = 4;// op2=1;
jt1.setText("" + op1);// op1=op2;
} else {
currentOp = preOp;
preOp = 4;
switch (currentOp) {
case 1:
op1 = op1 + op2;
jt1.setText("" + op1);
break;
case 2:
op1 = op1 - op2;
jt1.setText("" + op1);
break;
case 3:
op1 = op1 * op2;
jt1.setText("" + op1);
break;
case 4:
op1 = op1 / op2;
jt1.setText("" + op1);
break;
}
}
} else if (s.equals("="))// =
{
if (currentOp == 0) {
str.setLength(0);
jt1.setText("" + op2);
} else {
str.setLength(0);
currentOp = preOp;
switch (currentOp) {
case 1:
op1 = op1 + op2;
jt1.setText("" + op1);
break;
case 2:
op1 = op1 - op2;
jt1.setText("" + op1);
break;
case 3:
op1 = op1 * op2;
jt1.setText("" + op1);
break;
case 4:
op1 = op1 / op2;
jt1.setText("" + op1);
break;
}
currentOp = 0;
op2 = 0;
}
} else if (s.equals(".")) {
isDouble = true;
if (jt1.getText().trim().indexOf('.') != -1)
;
else {
if (jt1.getText().trim().equals("0")) {
str.setLength(0);
jt1.setText((str.append("0" + s)).toString());
}
// else
// if(jt1.getText().trim().equals("")){}//如果初时显示为空则不做任何操作
else {
jt1.setText((str.append(s)).toString());
}
}
} else if (s.equals("0"))// 如果选择的是"0"这个数字键
{
if (jt1.getText().trim().equals("0.")) {
} else {
jt1.setText(str.append(s).toString());
op2 = Double.(jt1.getText().trim());
}
} else {
jt1.setText(str.append(s).toString());
op2 = Double.(jt1.getText().trim());
if (currentOp == 0)
op1 = op2;
}
}
public static void main(String args[])
{
JPanelEa1 g=new JPanelEa1();
}
@Override
public void (MenuEvent e) {
// TODO Auto-generated method stub

}
@Override
public void (MenuEvent e) {
// TODO Auto-generated method stub

}
@Override
public void (MenuEvent e) {
// TODO Auto-generated method stub

}

}

用c++设计一个迷宫游戏

(1)在程序开始处增加菜单选项,可以在程序中输入任意大小的迷宫图(m * n, m \ n不超过15),在计算机中保存新输入的迷宫图,一共不超过5幅,并且在进入游戏时自由选择其中的一幅,自己设定出口参数,5幅输满后,后面输入的将最前面的冲掉。
(2)可以随意选择玩家的初始位置,也可以由计算机随机选择(在菜单中选择)。
(3)记录玩家的旅行记录,即每一次迷宫的碰壁次数,用了多少步走出迷宫等。
(4)设定悔步功能,即按指定键(自定)可以悔一步,连带的这一步的记录也将一并删除。

怎样设计一个好的迷宫?

迷宫这个游戏可是陪伴着我度过了很多美好的时光。小的时候家里总是有很多的迷宫书或者是玩具,总是玩得不亦乐乎。长大后虽然很少去买这些东西了,但是我仍记得在《最强大脑》的节目舞台上看到蜂巢迷宫的时候还是满满的惊叹。当然我发现,自己制作一个迷宫也是一个十分不错的体验。

【1】迷宫的难易不完全取决于复杂性
看上去复杂的迷宫,其实不一定难,可能“干扰路线”的干扰性很弱;而看上去简洁的迷宫,如果设计精巧,也可以让人晕头转向。所以一味地扩大迷宫图的大小,让其看起来密密麻麻,但如果不能有效利用整个迷宫图,就未必能让迷宫变得更难。

【2】迷宫设计时间与解出时的间比值应该尽可能小
如果给予足够多的时间,人人都可以画出一个足够复杂的迷宫。但如果你花了 10 个小时画出来的迷宫,被人用 5 分钟就解出来了,那这个迷宫并不比用 2 分钟设计,却要用 1 分钟解出的迷宫更好。
 
【3】迷宫的解应当是唯一或者极少的
仔细研究可以发现,迷宫并没有真正意义上的死路,通过好几处从岔路走也可以通,有网友指出,很多岔路本质上还是“捷径”。

【4】“倒走迷宫”和“正走迷宫”的难度相当
很多人在设计迷宫时,总想着在入口附近设计大量岔路,但却没在出口附近设计足够多的岔路。这使得玩家在解题时倾向于“倒走”迷宫,从出口往入口找路线让迷宫变得十分简单。这在设计迷宫时是值得注意的。

在三维迷宫中,《仙剑奇侠传三》中的迷宫的难度一直被人津津乐道,但它的难度很大程度上源于它的动态性质,比如用复杂的操作步骤解锁机关等。所以,迷宫的种类有很多,只要乐于发现,一步一步尝试,一定可以设计出自己喜欢的样子。

《走迷宫游戏》 问题描述 :以一个m×n的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。

#include<cstdio>#include<cstring>using namespace std;int dx[]={-1,0,1,0};int dy[]={0,1,0,-1};int a[1000][1000];int m,n;void init(){ freopen("maze.in", "r", stdin); freopen("maze.out", "w", stdout);}void readdata(){ scanf("%d%d", &m, &n); for(int i=0;i<m;i++) { for(int j=0;j<n;j++) { scanf("%d", &a[i][j]); } }}void dfs(int x, int y){ if(x==m-1&&y==n-1) { for(int i=0;i<m;i++) { for(int j=0;j<n;j++) { printf("%d ", a[i][j]); } printf("\n"); } printf("\n"); } for(int i=0;i<4;i++) { int nx=x+dx[i]; int ny=y+dy[i]; if(nx>=0&&nx<m&&ny>=0&&ny<n&&a[nx][ny]==0) { a[nx][ny]=8; dfs(nx,ny); a[nx][ny]=0; } }}
void work(){ a[0][0]=8; dfs(0,0);}
int main(){ init(); readdata(); work(); return 0;}

温馨提示:为不影响您的学业,来校区前请先电话咨询,方便我校安排相关的专业老师为您解答
  • 作者最新文章
  • 在线报名
申请试听课程

只要一个电话
我们免费为您回电

姓名不能为空
手机号格式错误