JAVA实现走迷宫

JAVA实现走迷宫
JAVA实现走迷宫

//MazeWindow 主类

import javax.swing.*;

import java.awt.*;

import java.awt.event.*;

import java.io.*;

import java.util.Hashtable;

import javax.swing.filechooser.*;

public class MazeWindow extends JFrame implements ActionListener{

Maze maze;

JMenuBar bar;//声明菜单条对象

JMenu menuChoice,menuImage,hero;//声明菜单对象

JMenuItem wallImage,roadImage,defaultImage,playerImage1,heroItem,heroclear;//声明菜单项对象

File mazeFile,wallImageFile,roadImageFile;

JButton renew;//声明按钮对象

String player="person.gif";

ShowRecord showRecord; //ShowRecord类创建一个类对象

File 英雄榜=new File("英雄榜.txt");

File file[]=null;

static String[] mazeName;

static String currentMap;

Hashtable hashtable=null; //哈希表

MazeWindow(){

wallImageFile=new File("wall.gif");

roadImageFile=new File("road.jpg");

bar=new JMenuBar();//创建菜单条对象

menuChoice=new JMenu("选择迷宫");

File dir=new File(".");

file=dir.listFiles(new FilenameFilter(){

public boolean accept(File dir,String name){

return name.endsWith("maze");

}

}

);

mazeName=new String[file.length];

for(int i=0;i< file.length;i++)

{

mazeName[i]=file[i].getName().substring(0, file[i].getName().length()-5);//substring(截取的起

始位置,截取的长度);

}

for(int i=0;i< mazeName.length;i++)

{

JMenuItem item=new JMenuItem(mazeName[i]);

item.addActionListener(this);

menuChoice.add(item);

}

mazeFile=new File(file[0].getName());

currentMap=mazeName[0];

init();

menuImage=new JMenu("选择墙和路的图像");

wallImage=new JMenuItem("墙的图像");//创建菜单项对象

roadImage=new JMenuItem("路的图像");

playerImage1=new JMenuItem("玩家图像");

defaultImage=new JMenuItem("墙和路的默认图像");

menuImage.add(wallImage);//菜单项添加到菜单上,如图3-5

menuImage.add(roadImage);

menuImage.add(playerImage1);

menuImage.add(defaultImage);

hero=new JMenu("英雄榜");

heroItem=new JMenuItem("查看英雄榜");

heroclear=new JMenuItem("清空英雄榜");

hero.add(heroItem);

hero.add(heroclear);

bar.add(menuChoice);

bar.add(menuImage);//菜单添加到菜单条上,如图3-5

bar.add(hero);

setJMenuBar(bar);

wallImage.addActionListener(this);//为菜单项添加监听器

roadImage.addActionListener(this);

playerImage1.addActionListener(this);

defaultImage.addActionListener(this);

heroItem.addActionListener(this);

heroclear.addActionListener(this);

renew=new JButton(new ImageIcon("龙珠.gif"));//为“重新开始”按钮添加监听器Font font=new Font("楷体",Font.BOLD,30);

renew.setFont(font);

renew.setVerticalAlignment(SwingConstants.TOP);

renew.addActionListener(this);

add(maze,BorderLayout.CENTER);//默认布局,如图3-7

add(renew,BorderLayout.SOUTH);

hashtable=new Hashtable();

for(int i=0;i

{

hashtable.put(mazeName[i]+"1",mazeName[i]+"#"+100+"#匿名1");

hashtable.put(mazeName[i]+"2",mazeName[i]+"#"+100+"#匿名2");

hashtable.put(mazeName[i]+"3",mazeName[i]+"#"+100+"#匿名3");

}

if(!英雄榜.exists()) {//英雄榜是File类对象;boolean exists() 测试此抽象路径名表示的文件或目录是否存在。

try{ FileOutputStream out=new FileOutputStream(英雄榜);

ObjectOutputStream objectOut=new ObjectOutputStream(out);

objectOut.writeObject(hashtable); //void writeObject(Object obj) 将指定的对象写入ObjectOutputStream。

objectOut.close(); //void close() 关闭流。

out.close(); //java.io 类FileOutputStrea的方法void close() 关闭此文件输出流并释放与此流有关的所有系统资源。

}

catch(IOException e){}

}

showRecord =new ShowRecord(this,mazeName.length);

setVisible(true);

setBounds(60,60,1012,890);

validate();

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/*EXIT_ON_CLOSE:退出应用程序后的默认窗口关闭操作*/

}

public void init(){

if(maze!=null){

remove(maze);

remove(maze.getHandleMove());

}

maze=new Maze();

maze.setWallImage(wallImageFile);

maze.setRoadImage(roadImageFile);

maze.setMazeFile(mazeFile);

maze.person.setImage(player);

add(maze,BorderLayout.CENTER);

add(maze.getHandleMove(),BorderLayout.NORTH);

validate();

}

public void actionPerformed(ActionEvent e){

if(e.getSource()==roadImage){

JFileChooser chooser=new JFileChooser();//文件对话框

FileNameExtensionFilter filter=new FileNameExtensionFilter(

"JPG&GIF Images","jpg","gif");

chooser.setFileFilter(filter);

int state=chooser.showOpenDialog(null);

File file=chooser.getSelectedFile();

if(file!=null&&state==JFileChooser.APPROVE_OPTION){

roadImageFile=file;

maze.setRoadImage(roadImageFile);

}

}

else if(e.getSource()==wallImage){

JFileChooser chooser=new JFileChooser();

FileNameExtensionFilter filter=new FileNameExtensionFilter(

"JPG&GIF Images","jpg","gif");

chooser.setFileFilter(filter);

int state=chooser.showOpenDialog(null);

File file=chooser.getSelectedFile();

if(file!=null&&state==JFileChooser.APPROVE_OPTION){

wallImageFile=file;

maze.setWallImage(wallImageFile);

}

}

else if(e.getSource()==playerImage1)

{

JFileChooser chooser=new JFileChooser();

FileNameExtensionFilter filter=new FileNameExtensionFilter(

"JPG&GIF Images","jpg","gif");

chooser.setFileFilter(filter);

int state=chooser.showOpenDialog(null);

File file=chooser.getSelectedFile();

if(file!=null&&state==JFileChooser.APPROVE_OPTION){

player=file.getName();

maze.person.setImage(player);

}

}

else if(e.getSource()==defaultImage){

wallImageFile=new File("wall.gif");

roadImageFile=new File("road.jpg");

maze.setWallImage(wallImageFile);

maze.setRoadImage(roadImageFile);

}

else if(e.getSource()==renew){

init();

}

else if(e.getSource()==heroItem) //点击英雄榜

{

showRecord.setMazeName(mazeName);

showRecord.readAndShow(hashtable);

showRecord.setVisible(true);

}

else if(e.getSource()==heroclear){

File f=new File("英雄榜.txt");

f.delete();

JFrame t=new JFrame("提示!");

t.setFont(new Font("楷体",Font.BOLD,30));

t.setSize(300,215);

t.setLocationRelativeTo(null);

JPanel pan=new JPanel();

t.setContentPane(pan);

BorderLayout bLayout=new BorderLayout(20,20);

pan.setLayout(bLayout);

JLabel leb=new JLabel("英雄榜已清空,请重新载入游戏。");

pan.add(leb,BorderLayout.CENTER);

t.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

t.setVisible(true);

}

else{

JMenuItem item=(JMenuItem)e.getSource();

mazeFile=new File(item.getText()+".maze");

currentMap=item.getText();

maze.getHandleMove().setMap(currentMap);

init();

}

}

public static void main(String args[]){

new MazeWindow();

}

}

//Maze类

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

import java.io.*;

public class Maze extends JLayeredPane{

File mazeFile;

MazePoint[][] mazePoint;

WallOrRoad[][] wallOrRoad;

PersonInMaze person;

HandleMove handleMove;

File wallImage,roadImage;

int distance=45,m=0,n=0;

public Maze(){

setLayout(null);

wallImage=new File("wall.gif");

roadImage=new File("road.jpg");

person=new PersonInMaze();

handleMove=new HandleMove();

handleMove.initSpendTime();

person.addKeyListener(handleMove);

setLayer(person,JLayeredPane.DRAG_LAYER);

}

public void setMazeFile(File f){

mazeFile=f;

char [][]a;

RandomAccessFile in=null;

String lineWord=null;

try{ in=new RandomAccessFile(mazeFile,"r"); //创建RandomAccessFile类的只读对象

/*RandomAccessFile是用来访问那些保存数据记录的文件的,这样你就可以用seek( )方法来访问记录,并进行读写了*/

long length=in.length();

long position=0;

in.seek(position);

while(position

String str=in.readLine().trim();

if(str.length()>=n)

n=str.length();

position=in.getFilePointer();

m++;

}

a=new char[m][n];

position=0;

in.seek(position);

m=0;

while(position

String str=in.readLine();

a[m]=str.toCharArray();

position=in.getFilePointer();

m++;

}

in.close();

wallOrRoad=new WallOrRoad[m][n];

for(int i=0;i

for(int j=0;j

wallOrRoad[i][j]=new WallOrRoad();

if(a[i][j]=='1'){

wallOrRoad[i][j].setIsWall(true);

wallOrRoad[i][j].setWallImage(wallImage);

wallOrRoad[i][j].repaint();

}

else if(a[i][j]=='0'){

wallOrRoad[i][j].setIsRoad(true);

wallOrRoad[i][j].setRoadImage(roadImage);

wallOrRoad[i][j].repaint();

}

else if(a[i][j]=='*'){

wallOrRoad[i][j].setIsEnter(true);

wallOrRoad[i][j].setIsRoad(true);

wallOrRoad[i][j].repaint();

}

else if(a[i][j]=='#'){

wallOrRoad[i][j].setIsOut(true);

wallOrRoad[i][j].setIsRoad(true);

wallOrRoad[i][j].repaint();

}

}

}

mazePoint=new MazePoint[m][n];

int Hspace=distance,Vspace=distance;

for(int i=0;i

for(int j=0;j

mazePoint[i][j]=new MazePoint(Hspace,Vspace);

Hspace=Hspace+distance;

}

Hspace=distance;

Vspace=Vspace+distance;

}

for(int i=0;i

for(int j=0;j

add(wallOrRoad[i][j]);

wallOrRoad[i][j].setSize(distance,distance);

wallOrRoad[i][j].setLocation(mazePoint[i][j].getX(),mazePoint[i][j].getY());

wallOrRoad[i][j].setAtMazePoint(mazePoint[i][j]);

mazePoint[i][j].setWallOrRoad(wallOrRoad[i][j]);

mazePoint[i][j].setIsWallOrRoad(true);

if(wallOrRoad[i][j].getIsEnter()){

person.setAtMazePoint(mazePoint[i][j]);

add(person);

person.setSize(distance,distance);

person.setLocation(mazePoint[i][j].getX(),mazePoint[i][j].getY());

person.requestFocus();

person.repaint();

}

}

}

handleMove.setMazePoint(mazePoint);

}

catch(IOException exp){

JButton mess=new JButton("无效的迷宫文件");

add(mess);

mess.setBounds(30,30,100,100);

mess.setFont(new Font("宋体",Font.BOLD,30));

System.out.println(exp+"mess");

}

}

public void setWallImage(File f){

wallImage=f;

for(int i=0;i

for(int j=0;j

if(wallOrRoad[i][j].getIsWall())

wallOrRoad[i][j].setWallImage(wallImage);

wallOrRoad[i][j].repaint();

}

}

}

public void setRoadImage(File f){

roadImage=f;

for(int i=0;i

for(int j=0;j

if(wallOrRoad[i][j].getIsRoad())

wallOrRoad[i][j].setRoadImage(roadImage);

wallOrRoad[i][j].repaint();

}

}

}

public HandleMove getHandleMove(){

return handleMove;

}

}

//WallOrRoad类

import javax.swing.*;

import java.awt.*;

import javax.swing.border.*;

import java.io.*;

public class WallOrRoad extends JPanel{

boolean isRoad,isWall,isEnter,isOut,havePassed;

MazePoint point;

File wallImage,roadImage,personImage;

Toolkit tool;

WallOrRoad(){

tool=getToolkit();

}

public void setIsEnter(boolean boo){

isEnter=boo;

if(isEnter==true)

add(new JLabel("入口"));//定义迷宫的入口

}

public boolean getIsEnter(){

return isEnter;

}

public void setIsOut(boolean boo){

isOut=boo;

if(isOut==true)

add(new JLabel("出口"));//定义迷宫的出口

}

public boolean getIsOut(){

return isOut;

}

public void setIsRoad(boolean boo){

isRoad=boo;

if(isRoad==true){

setBorder(null);//置此组件的边框,无

}

}

public boolean getIsRoad(){

return isRoad;

}

public void setIsWall(boolean boo){

isWall=boo;

if(isWall==true)

setBorder(new SoftBevelBorder(BevelBorder.RAISED));/* SoftBevelBorder是实现某种斜面的类,这种斜面要么凸出要么凹入且拐角圆滑,BevelBorder该类实现简单的双线斜面边框,RAISED:凸出斜面类型。*/

}

public boolean getIsWall(){

return isWall;

}

public void setAtMazePoint(MazePoint p){

point=p;

}

public MazePoint getAtMazePoint(){

return point;

}

public void setWallImage(File f){

wallImage=f;

}

public void setRoadImage(File f){

roadImage=f;

}

public void setPassed(boolean b)

{

havePassed=true;

}

public void paintComponent(Graphics g){

super.paintComponent(g);

int w=getBounds().width;

int h=getBounds().height;

try{

if(isRoad==true){

Image image=tool.getImage(roadImage.toURI().toURL());

g.drawImage(image,0,0,w,h,this);

}

else if(isWall=true){

Image image=tool.getImage(wallImage.toURI().toURL());

g.drawImage(image,0,0,w,h,this);

}

}

catch(Exception exp){}

}

}

//MazePoint类

public class MazePoint{

int x,y;

boolean haveWallOrRoad;

WallOrRoad wallOrRoad=null;

public MazePoint(int x,int y){

this.x=x;

this.y=y;

}

public boolean isHaveWallOrRoad(){

return haveWallOrRoad;

}

public void setIsWallOrRoad(boolean boo){

haveWallOrRoad=boo;

}

public int getX(){

return x;

}

public int getY(){

return y;

}

public boolean equals(MazePoint p){

if(p.getX()==this.getX()&&p.getY()==this.getY())/*如果MazePoint的对象p的x、y 值和上面返回的x、y值相同,则返回true,否则返回false*/

return true;

else

return false;

}

public void setWallOrRoad(WallOrRoad obj){

wallOrRoad=obj;

}

public WallOrRoad getWallOrRoad(){

return wallOrRoad;

}

}

//PersonInMaze类

import javax.swing.*;

import java.awt.*;

import javax.swing.filechooser.*;

import java.io.*;

public class PersonInMaze extends JTextField{

MazePoint point;

Toolkit tool;

String person="person1.gif";

PersonInMaze(){

tool=getToolkit(); //获得工具包

setEditable(false);//不可见

setBorder(null);//无边框

setOpaque(false);//非透明的

setToolTipText("单击我,然后按键盘方向键");//提示信息,如图3-1所示。

}

public void setAtMazePoint(MazePoint p){

point=p;

}

public MazePoint getAtMazePoint(){

return point;

}

public void paintComponent(Graphics g){//设置走迷宫者的图片

super.paintComponent(g);

int w=getBounds().width;

int h=getBounds().height;

Image image=tool.getImage(person);//获得image图像

g.drawImage(image,0,0,w,h,this);//绘制image图像

}

public void setImage(String person)

{

this.person=person;

}

}

//HandleMove类

import java.awt.event.*;

import java.awt.*;

import javax.swing.*;

public class HandleMove extends JPanel implements KeyListener,ActionListener{ MazePoint[][] p;

int spendTime=0;

javax.swing.Timer recordTime;

JTextField showTime;

Toolkit tool;

String maze=MazeWindow.currentMap; //MazeWindow类创建一个对象指向currentMap 。字符串

Sound sound;

int step;

HandleMove(){

recordTime=new javax.swing.Timer(1000,this);

showTime=new JTextField(16);

tool=getToolkit();

sound=new Sound();

showTime.setEditable(false);

showTime.setHorizontalAlignment(JTextField.CENTER);

showTime.setFont(new Font("楷体_GB2312",Font.BOLD,16));

JLabel hitMess=new JLabel("单击走迷宫者,按键盘方向键",new ImageIcon("龙珠2.gif"),JLabel.CENTER);

hitMess.setFont(new Font("楷体_GB2312",Font.BOLD,18));

add(hitMess);

add(showTime);

setBackground(Color.red);

}

public void setMazePoint(MazePoint[][] point){

p=point;

}

public void setMap(String maze)

{

this.maze=maze;

}

public void initSpendTime(){

recordTime.stop();

spendTime=0;

showTime.setText(null);

}

public void keyPressed(KeyEvent e){

recordTime.start();

PersonInMaze person=null;

person=(PersonInMaze)e.getSource();

int m=-1,n=-1;

MazePoint startPoint=person.getAtMazePoint();

for(int i=0;i

for(int j=0;j

if(startPoint.equals(p[i][j])){

m=i;

n=j;

break;

}

}

}

if(spendTime>10)

{

person.setImage("pig.gif");

}

if(e.getKeyCode()==KeyEvent.VK_UP){

int k=Math.max(m-1,0);

if(p[k][n].getWallOrRoad().getIsRoad()){//逻辑真时,走迷宫者不能穿进墙if(sound.isPlaying()==true)

{

sound.stop();

}

sound.makeSound("walk.wav");

person.setAtMazePoint(p[k][n]);

person.setLocation(p[k][n].getX(),p[k][n].getY());

}}

else if(e.getKeyCode()==KeyEvent.VK_DOWN){

int k=Math.min(m+1,p.length-1);

if(p[k][n].getWallOrRoad().getIsRoad()){

if(sound.isPlaying()==true)

{

sound.stop();

}

sound.makeSound("walk2.wav");

person.setAtMazePoint(p[k][n]);

person.setLocation(p[k][n].getX(),p[k][n].getY());

}

}

else if(e.getKeyCode()==KeyEvent.VK_LEFT){

int k=Math.max(n-1,0);

if(p[m][k].getWallOrRoad().getIsRoad()){

if(sound.isPlaying()==true)

{

sound.stop();

}

sound.makeSound("walk3.wav");

person.setAtMazePoint(p[m][k]);

person.setLocation(p[m][k].getX(),p[m][k].getY());

}

}

else if(e.getKeyCode()==KeyEvent.VK_RIGHT){

int k=Math.min(n+1,p[0].length-1);

if(p[m][k].getWallOrRoad().getIsRoad()){

if(sound.isPlaying()==true)

{

sound.stop();

}

sound.makeSound("walk4.wav");

person.setAtMazePoint(p[m][k]);

person.setLocation(p[m][k].getX(),p[m][k].getY());

}

}}

public void actionPerformed(ActionEvent e){

spendTime++;

showTime.setText("您的用时:"+spendTime+"秒");

}

public void keyReleased(KeyEvent e){

PersonInMaze person=(PersonInMaze)e.getSource();

int m=-1,n=-1;

MazePoint endPoint=person.getAtMazePoint();

if(endPoint.getWallOrRoad().getIsOut()){

recordTime.stop();

if(spendTime>10){

JOptionPane.showMessageDialog(this,"恭喜您闯关成功,亲!但用时超过10秒钟,速度慢了些哦!用时:"+spendTime+"秒","消息框",https://www.360docs.net/doc/e815711557.html,RMA TION_MESSAGE);

}

else

JOptionPane.showMessageDialog(this,"恭喜您闯关成功,亲!用时:"+spendTime+"秒","消息框",https://www.360docs.net/doc/e815711557.html,RMATION_MESSAGE);

Record record=new Record();

if(record.isBrokenRecord(maze,spendTime)==true)//判断是否破纪录{

record.setMaze(maze);

record.setTime(spendTime);

record.setVisible(true);

}

}

}

public void keyTyped(KeyEvent e){}

}

//Record类

import java.io.*;

import java.util.*;

import javax.swing.*;

import java.awt.event.*;

import java.awt.*;

public class Record extends JDialog implements ActionListener{ int time=0;

String maze;

String message="";

JTextField textName;

JLabel label=null;

JButton 确定,取消;

public Record(){

setTitle("记录你的成绩");

setBounds(200,200,320,300);

setResizable(false);

setModal(true);

确定=new JButton("确定");

取消=new JButton("取消");

textName=new JTextField(8);

textName.setText("匿名");

确定.addActionListener(this);

取消.addActionListener(this);

setLayout(new GridLayout(2,1));

label=new JLabel("您现在是...高手,输入您的大名上榜啊");

add(label);

JPanel p=new JPanel();

p.add(textName);

p.add(确定);

p.add(取消);

add(p);

setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);

}

public void setMaze(String maze){

this.maze=maze;

label.setText(" 恭喜!你破纪录了!请输入您的名字");

}

public void setTime(int time){

this.time=time;

}

public void actionPerformed(ActionEvent e){

if(e.getSource()==确定){

message=maze+"#"+time+"#"+" "+textName.getText();

writeRecord(maze,message);

setVisible(false);

}

if(e.getSource()==取消){

setVisible(false);

}

}

public boolean isBrokenRecord(String key,int time)//在HandleMove中调用,key是迷宫名{

boolean b=false;

File f=new File("英雄榜.txt");

try{

int n=0;

Hashtable hashtable = null;//构造一个哈希表

FileInputStream in=new FileInputStream(f);

ObjectInputStream object_in=new ObjectInputStream(in);

hashtable =(Hashtable)object_in.readObject();

object_in.close();

in.close();

String temp3=(String)hashtable.get(key+"3"); //返回此哈希表中指定键所映射到的值

StringTokenizer fenxi=new StringTokenizer(temp3,"#");

fenxi.nextToken();

n=Integer.parseInt(fenxi.nextToken());

if(time

b=true;

System.out.println("破纪录了!");

}

catch(Exception e) {

System.out.println(e);

}

return b;

}

public void writeRecord(String key,String message){//key是迷宫文件名,message是记录地图名、时间、用户名的字符串

File f=new File("英雄榜.txt");

try{

int n1=0,n2=0,n3=0;

String a;

Hashtable hashtable = null;

FileInputStream in=new FileInputStream(f);

ObjectInputStream object_in=new ObjectInputStream(in);

hashtable =(Hashtable)object_in.readObject();

object_in.close();

in.close();

String temp1=(String)hashtable.get(key+"1");

String temp2=(String)hashtable.get(key+"2");

String temp3=(String)hashtable.get(key+"3");

StringTokenizer fenxi1=new StringTokenizer(temp1,"#");

StringTokenizer fenxi2=new StringTokenizer(temp2,"#");

StringTokenizer fenxi3=new StringTokenizer(temp3,"#");

/*StringTokenizer类

public StringTokenizer(String str,

String delim)为指定字符串构造一个string tokenizer。delim 参数中的字符都是分隔标记的分隔符。分隔符字符本身不作为标记。

注意,如果delim 为null,则此构造方法不抛出异常。但是,尝试对得到的StringTokenizer 调用其他方法则可能抛出NullPointerException。

参数:

str - 要分析的字符串。

delim - 分隔符。*/

fenxi1.nextToken();//nextToken() 返回此string tokenizer 的下一个标记。

n1=Integer.parseInt(fenxi1.nextToken());

fenxi2.nextToken();

n2=Integer.parseInt(fenxi2.nextToken());

fenxi3.nextToken();

n3=Integer.parseInt(fenxi3.nextToken());

if(time

{ a=temp2;temp2=temp1;temp3=a;

hashtable.put(key+"1",message);//将指定key 映射到此哈希表中的指定value

hashtable.put(key+"2",temp2);

hashtable.put(key+"3",temp3);

FileOutputStream out=new FileOutputStream(f);

ObjectOutputStream object_out=new ObjectOutputStream(out);

object_out.writeObject(hashtable);

object_out.close();

out.close();

}

else if(time

{ temp3=temp2;

hashtable.put(key+"2",message);//将指定key 映射到此哈希表中的指定value hashtable.put(key+"3",temp3);

FileOutputStream out=new FileOutputStream(f);

ObjectOutputStream object_out=new ObjectOutputStream(out);

object_out.writeObject(hashtable);

object_out.close();

out.close();

}

else if(time

{ hashtable.put(key+"3",message);//将指定key 映射到此哈希表中的指定value

FileOutputStream out=new FileOutputStream(f);

ObjectOutputStream object_out=new ObjectOutputStream(out);

object_out.writeObject(hashtable);

object_out.close();

out.close();

}

}

catch(Exception e) {

System.out.println(e);

}

}

}

//ShowRecord类

import java.io.*;

import java.util.*;

import javax.swing.*;

import java.awt.event.*;

import java.awt.*;

public class ShowRecord extends JDialog {

File file = new File("英雄榜.txt");

String name = null;

JLabel Hero[][];

JLabel Hero2[][];

JLabel Hero3[][];

String mazeName[];

int mazeNum=6;

(完整word版)走迷宫游戏程序设计.docx

《C 语言程序设计》 题目走迷宫游戏程序设计 一、内容 本系统主要实现了走迷宫游戏,执行游戏的时候出现迷宫图案,每次各不相同,但是入 口均在左上角,出口在右下角,出入口各有“出”、“入”提示。人物为㊣,“█”表示墙,外围为一圈墙,空白部分为可行走的路,使用“上”、“下”、“左”、“右”键操作㊣,当遭遇“墙”时无法前进,操作“█”上下左右移动,直至走到出口,游戏胜利。当无法走出迷宫 时,按“ Esc”键即可退出游戏。 二、上机环境 操作系统: windows XP 开发工具: vc6.0 三、函数调用关系图

main 函数 creat 函数paint 函数game 函数gotoxy 函数get_key函数gotox 函数 图一:函数调用关系图 四、各函数功能说明 main 函数:主函数; create函数:随机生成迷宫; paint函数:画出迷宫; game函数:开始游戏; gotoxy 函数:在文本窗口设置光标; get_key函数:接受按键; 五、算法描述或流程图

开始 游戏界面 画长 33 宽 31 迷宫玩家继续移动人物 开始游戏 N 玩家移动人物 是否到达 口? 出N Y 是否遇 到墙?游戏成功 Y 结束人物坐标位置不变 图二:算法流程图 六、程序运行效果图

图三:游戏开始效果图

图四:到达终点效果图 七、总结 课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践 能力的重要环节。大学来说掌握计算机开发技术是十分重要的。在程序设计的过程中,我遇到了不少的问题,请教过学姐或者学长,也请教了老师,最后将程序设计好了。回顾起此次 课程设计,我感慨良多,从拿到题目到完成整个编程,从理论到实践,在整整两个星期的日 子里,我学到了很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且还学到了很多在书本上所没有学到过的知识,我发现 c 语言是一门有趣的课程,对它产生了很大的兴趣。并且我明白了细心真的很重要,有时候就是因为一点点的小错误,而导致程序无法调试,并且需要花较长的时间去寻找错误。细心很重要的。 两个星期前的现在,当听到老师布置给我们的题目时,我们都蒙了,这么难的题目我们怎么会啊,我们只能尽我们自己最大的努力把程序给写出来,虽然知道这一路肯定是异常的 艰苦,但豁出去了。上网查资料、去图书馆查,查相关的函数,经过两三天的努力,我把框 架弄出来了,可是还有计算难题摆在我的面前,真的是个难题,自从把框架弄好了以后就没 有进展了,眼看一个星期快过去了,我那个急啊,可是急也没有用。我坚持,终于工夫不负 有心人,大功告成了。

java课程设计要求与题目

《面向对象程序设计》综合实验指导书一.课程设计的目的和任务 《面向对象程序设计》课程设计是软件工程专业本科学生在学习完《面向对象程序设计》课程之后的一个重要的实践环节。要求学生在教师的指导下,综合运用在《面向对象程序设计》课程中学过的面向对象程序设计思想与Java编程技巧,独立完成一项较为完整、并具有一定难度的课程设计任务,加深对面向对象程序设计思想的理解,掌握利用Java语言编写具体的应用程序。培养学生的团队合作精神、良好的程序设计风格以及了解应用程序的设计开发过程和Java程序编程与测试的能力。二.总体要求: 1、每个班分若干个组,每组2-3人(自由组合)课程设计题目由任 课老师指定; 2、人员分工:组长1人、组员1到2人。组长可由小组人员自行选出 或自荐,组长的职责是负责与老师交流,合理安排分配本组的各项任务,任务有:系统总体设计、编码、测试、写文档。 3、程序编码总体要求: 编程工具统一使用Eclipse。 统一使用Java的AWT组件进行GUI编程(或Applet编程), 必须有登录界面,登录的用户名和密码为组长的名字的全 拼;非Applet程序要求有一个框架窗口,关闭窗口时要注意 处理窗口事件退出程序。 程序编码时,必须严格遵守Java程序标识符的一般约定,并 要加适量的注释。 4、程序编码完成后,一定要进行严密的测试工作。 5、文档内容要求: 封面(见封面文件)。以下每个内容为一章; 项目计划(内容是:小组人员名单与所负责的工作)。 程序详细功能描述(描述你的程序能完成什么功能)。要求 200字左右。 程序使用说明(对程序的每个操作步骤的屏幕画面进行载 图,并加以文字说明)。 此次课程设计的编程心得。要求每人50字以上。 文档的字体与大小,统一采用“宋体五号字”;要将以上内容 合写成一篇完整的文档;文档头要加入标题和目录索引。 6、程序完成后,要提交文档与程序(包括源码,每组提交一份),

JAVA课程设计大纲

淮海工学院 课程设计教学大纲 课程名称:面向对象课程设计 开课系部:软件工程 撰写人:纪兆辉 审核人: 修(制)订日期:2008年3月 系(院)主管领导签章: 淮海工学院教务处

面向对象课程设计大纲 课程类别:必修学时:40 课程性质:集中实践教学学分:2 适用专业:软件工程、网络工程开课系部:软件工程 一、基本目的与任务 面向对象课程设计是软件工程、网络工程专业实践性环节之一,是学习完《面向对象程序设计》课程后进行的一次全面的综合练习。其目的在于加深对面向对象理论和基本知识的理解,掌握使用Java语言进行面向对象程序设计的基本方法,提高运用面向对象知识解决实际问题的能力。基本任务是使得学生通过课程设计掌握利用java进行底层的网络应用程序设计、多媒体应用设计、JDBC编程的基本方法,学会综合利用awt包和Swing组件包进行图形用户界面的设计,同时,对java的事件委托模型、异常处理机制、包和接口的概念及多线程技术有比较熟练的把握。 二、教学基本内容 正确运用常用的包、工具类和算法,熟练进行对象类的定义和使用,综合运用图形界面元素构造应用程序界面,熟悉Applet的工作原理,熟练编写Java应用程序和Applet小程序。对网络编程、多媒体编程、JDBC技术能有较全面准确的把握并会综合运用解决实际问题。 在课程设计中,为了提高开发效率,建议尝试选用开发工具Eclipse、NetBeans、Jbuilder。设计的选题要围绕Java的面向对象特点,把如下一些知识点的运用组织到课程设计的选题当中: 包、接口、抽象类 常用工具与算法--数组、向量、字符串、链表等 Java的多线程技术与动画制作 Java的网络编程 Java的数据库连接技术---JDBC Java的异常处理机制 面向对象技术中的继承、重载、各种修饰符

java课设走迷宫含代码

目录1.设计目的 1.1课程设计的目的 2.总体设计 2.1设计思路 2.2设计方法 3.关键技术 4.程序流程 5.主要源代码 6. 运行结果及结论 7.参考文献

1.设计目的 1.1课程设计的目的 随着科技进步,时代发展,计算机走进了大家的生活。计算机程序强大的功能为使用者提供服务,编程语言也变得越来越流行。Java语言是当今流行的网络编程语言,它具有面向对象、跨平台、分布应用等特点。面向对象的开发方法是当今世界最流行的开发方法,它不仅具有更贴近自然的语义,而且有利于软件的维护和继承。 为了进一步巩固课堂上所学到的知识,深刻把握Java语言的重要概念及其面向对象的特性,熟练应用面向对象的思想和设计方法解决实际问题的能力,也是为了增加同学们娱乐游戏选择而开发了一个适合学生的,能提升思考力的迷宫冒险游戏,这既锻炼了动手能力,还能进行消遣娱乐,可谓一举两得。 2.总体设计 2.1设计思路 根据对游戏系统进行的需求分析,本系统将分为6个模块:分别是迷宫主界面模块、记时设计模块、迷宫设计模块、道路和障碍设计模块、动漫冒险者设计模块、出入口设计模块。实现的功能有: (1)迷宫的选择 玩家可以根据自身需求来进行选择简单迷宫、中等迷宫、难度迷宫三类中选择一类迷宫进行游戏。 (2)选择道路和障碍的图像 玩家可以根据个人喜好对迷宫中的道路和障碍的图片进行选择,但是图片的格式有规定,必须是“jpg”或“gif”格式的。 (3)游戏记时 当玩家控制迷宫中的动漫人物进行游戏时,计时器就开始进行记时,直到动漫人物到达出口时,记时结束,并在屏幕上显示游戏用时。 (4)开始游戏 玩家将鼠标移动至迷宫中的动漫冒险者,即可看到“单击我然后按键盘方向键”,单击后,游戏开始。玩家即可通过键盘上的方向键进行游戏。 (5)游戏结束 玩家控制动漫冒险者移动至迷宫地图的出口处时,游戏的计时器停止计时,并弹出信息框“恭喜您通关了”,游戏结束。

java课程设计2013级大纲以及设计报告

珠海学院课程教学大纲 课程名称:java程序课程设计 适用专业: 2013级计算机科学与技术 课程类别:专业基础课 制订时间:2014年12月 计算机科学与技术系制

目录 1java程序课程设计教学大纲 2 java程序课程设计说明书 3 java程序课程设计报告(模板) 4 java程序课程设计成绩评定表 java程序课程设计教学大纲 (2011年制订,2014年修订) 一、课程编号: 二、前修课程:java程序设计 三、学分:2学分 四、学时: 32学时 五、课程性质与任务: 1.课程性质:《java程序课程设计》是吉林大学珠海学院计算机科学与技术系为本科生各专业开设的专业实践课。计算机科学与技术系本科生在完成《java 程序设计》课程学习后,通过本课程进入专业实践训练环节,其主要目的是使学生深入理解并实践在《java程序设计》课程中所学的有关知识,通过课程设计增强学生的实践动手能力,提高学生独立分析和解决实际问题的能力。培养学生配合完成任务的能力,为学生毕业后的实际工作打好基础。 课程设计是培养学生综合运用所学知识锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。Java语言的应用十分广泛,例如大型信息系统、通信、网络控制等。java课程设计对增强学生对基础知识的掌握和综合运用是非常必要,对后续许多专业课程的学习和实践训练都具十分重要的意义。 2.课程任务:本课程要求学生在学习了java基础编程的相关技术后,将课本中多个章节的编程技术灵活运用到一些复杂的综合例题中去,使学生了解应用问题

的分析方法和设计解决实际问题的具体过程,掌握应用java进行程序设计的基本规范和技巧,掌握面向对象编程的设计思想,重点掌握java的基本语法规则、输入输出方法、网络编程、多线程编程、小应用程序、数据库编程的综合应用。通过编程掌握调试java程序的基本技巧、模块化应用程序和测试运行复杂应用程序的基本流程。 六、课程教学基本要求提供足够多的程序设计选题,题目应覆盖面较为广泛,部分题目要具有开放性,要求每个学生根据自己的实际情况选择题目,经教师批准后即可进入实际工作阶段。 课程设计结束对每个学生进行验收,要求每个学生提交合格的课程设计报告,还要保证程序能够运行,能够讲清楚自己的工作。老师在检查过程中可针对程序提出问题,学生回答,若程序无法运行得到结果并且具有大量编译错误,而且对程序的内容无法正确解释,则实践老师可以根据实际情况给予评分为不及格,若程序可以运行,但完成的界面以及方法不够完善,则酌情扣分,若程序运行无问题,则提问回答不好的也要相应扣分。课程设计课程集中安排在第十一周。每个同学都要提交初期、中期和最后的文档,提交课程设计报告,要求在规定时间内提交文档。最后验收时,若文档不全,成绩受到一定影响。 七、学时分配表 2011年 12 月8日 java程序课程设计说明书

最简单的c语言迷宫游戏实验报告

一、内容: 1、本游戏主要实现了人控制键盘方向键使小人(*)走出迷宫。 2、具有的功能: 1)、在游戏菜单里人可以选择不同难度的游戏进行游戏; 2)、在游戏过程中,可以通过键盘方向键使小人移动,走出迷宫; 3)、在游戏过程中,当人碰到墙壁(#)的时候小人过不去; 4)、当人顺利完成游戏之后,输出“========you are win!======”字样,30秒钟后自动返回到游戏菜单; 5)、在游戏过程中,人可以通过按Esc键返回游戏菜单;也可以可以按0直接退出游戏; 6)、在游戏菜单里,按0键可以退出游戏。 3、具体应用: 1)、人主要同过键盘的1,2,3数字键来选择游戏难度; 2)、在游戏中通过Esc键来返回菜单; 3)、同过0键退出游戏。 二、上机环境 操作系统:windows7 开发工具:VC6.0 三、函数调用关系图

四、各函数功能说明 main() 主函数; menu() 游戏菜单; roadcake() 消去小人路径; introduce() 游戏介绍; system(“cls”) 消屏函数; exit(0) 退出游戏; drawmg1() 画初级难度迷宫; drawmg2() 画中级难度迷宫; drawmg3() 画高级难度迷宫; control1() 控制初级难度游戏; control2() 控制中级难度游戏; control3() 控制高级难度游戏; 五、算法流程图 首先定义三个全局数组mg1[20][20]、mg2[30][30]、mg3[30][30]用于画出迷宫的地图;1表示墙(#),0表示空地(); Introduce( )函数里如果按Enter键,则调用menu( )函数,从键盘中输入相应的提示数字,进入难度不同的游戏;游戏的执行在此只初级难度进行描述,其余的难 度与其类似; 选了1后调用system(”cls”)进行清屏;drawmg1()函数进行迷宫的地图的绘

java课程设计方案

JAVA课程设计方案 1.设计目的与任务 本课程设计所要求达到的目的和任务:通过Java程序设计的一些重要理论基础来实现“写字留痕”的“日历”和“记事本”的双重功能。并通过此次课程设计的训练,使学生巩固和加深对Java这门课程的理解,通过利用所学到的计算科学的理论知识,提高解决实际问题的能力,增强运算、编程和使用技术资料的技能,通过实际问题的分析设计、编程和调试,掌握应用软件的分析方法和工程设计方法,能正确阐述设计和实验结果。通过这次课程设计,培养实事求是、认真、严谨的科学态度和刻苦钻研不断创新的精神,逐步建立正确的全局观念。 设计方案 3.1总体设计 (1)问题定义:创建写字留痕,实现对某日期的事情进行记录这主要功能,并能显示设置的图片,增加美观。 (2)问题分析:通过对“写字留痕”这一题材的分析,我需要四个类来实现其“日历”和“记事本”这两大功能。通过主类N2创建动写字留痕软件的主窗口,该类含有main方法,程序从该类开始执行。再用余下YearMonth 、MonthPane类来显示并改变日期和实现记事本的功能。而ImagePanel类用来显示图片,Music类用来实现音乐的播放控制。 (3)研究意义:通过本次课程设计,我们掌握了Java语言的基本运用,提高了理论结合实际的能力。 3.2设计要求 (1)日记本使用Java语言开发设计。课程的基本功能包括万年历、记事本和辅助功能三个部分。 (2)万年历部分由微调器确定年月,由一组文本框显示日历。年月可选择数据符合逻辑,默认为当前日期。 (3)月历显示应该符合查看习惯,如星期六和星期日分别用不同颜色表示,当日可用特别的字号和颜色 (4)记事本区,记事本容按年月日记录且保存。 (5)微调器应该进行事件设置,以及即时地显示该年月的月历;日期文本框可监听鼠标事件,当单击任何一个日期时,若该日有记事容,则在日记本中显示该日期的记录文字;若该日无记录,记事区保持空白。 (6)日记本应该是开放的,容可按日期增减,保存应即时,删除需谨慎删除记录时,应进行对话框询问确定。

初中信息技术七年级《Scratch:小猫走迷宫》公开课精品教案

Scratch《小猫走迷宫》教学设计
刘亚丽 一、教材分析 Scratch 是一门全新的程序设计语言,用其可以很容易的创造交互式故事情节,动画,游 戏,可以大大增加学生的学习兴趣。本课是学生学习的第三课,前两节介绍了 scratch 的界面 和功能,角色的添加、绘制,角色造型的切换,舞台的设置,基本模块的简单应用等,本节课 通过 《小猫走迷宫》 这个生动有趣的实例, 让学生在实践中了解程序设计的思维方式, 熟悉 “动 作、控制、外观、侦测”等模块的用法,提高学生的学习兴趣。本课的内容有承上启下的作用, 为后面程序的编写做了铺垫。b5E2RGbCAP 二、学情分析 本课的教学对象是七年级内初班学生,大部分学生计算机操作水平较低,也是初次接触 scratch 软件, 通过前两节课的学习, 已经掌握了添加、 删除角色, 造型编辑与切换, 对 Scratch 编程创作有了一定的体会,能设计控制角色运动的简单脚本,为本节课的学习奠定了基础。并 且学生对学习本软件很高的兴趣,有利于后续课程的开展。p1EanqFDPw 三、教学目标分析 (一)知识与技能: 1. 学会使用方向键或键盘字母控制角色的运 2.学会使用 3. 能 够 将 4. 会用 , 插入到 模块表达角 , 等模块指令。 条件判断模块中,实现条件的选择功能。 色心里想说的内容。 动。
(二)过程与方法: 1.通过案例分析,让学生理解程序设计的思维方式。 2.通过教师演示、引导,学生自主练习,合作探究,实现知识的拓展和迁移。 3.通过自己编写游戏,激发学生学习兴趣,感受成功喜悦。 (三)情感态度价值观: 1.激发创作热情,建立科学的思维方式。 2.培养自主学习、合作学习的精神。 四、教学重点:“动作、控制、侦测”等模块的用法。 五、教学难点:对循环语句“重复执行”和条件判断语句“如果”的应用,能为游戏角色搭建

C语言的图形编程应用—迷宫游戏

课程设计报告书 题目C语言的图形编程应用—迷宫游戏 系别计算机工程系 专业计算机科学与技术 班级 姓名 指导教师 下达日期2011 年12 月14 日 设计时间自2011年12月19日至2011年12月30日

指导教师评语

课程设计任务书

目录 Ⅰ.程序设计目的 (3) Ⅱ.运行环境 (3) Ⅲ.程序功能 (3) Ⅳ.程序设计内容 (3) Ⅳ.1设计界面 (3) Ⅳ.2设计思路 (3) Ⅳ.3流程图 (4) Ⅳ.4主要功能模块 (4) Ⅴ.小结与启发 (10) Ⅵ.参考文献 (11)

Ⅰ.程序设计目的 通过典型实例―——迷宫问题,加深对递归算法的理解和编制,掌握数组的运用。 Ⅱ.运行环境 主要在Windows 2000/XP操作系统TC下运行。 Ⅲ.程序功能 迷宫是深受大家喜爱的游戏之一,一般设计迷宫为二维平面图,将迷宫的左上角做入口,右下角做出口,求出从入口点到出口点的一条通路,作为线性结构的典型应用,大多是用非递归方法实现,输出用0代表通路,1代表墙壁。而本程序生成一个美观逼真的迷宫图,它是随机生成的且迷宫大小可以改变,迷宫的大小为N*N,N预定义为常数,修改N的值可以改变迷宫的大小(只要不超过屏幕显示范围),而程序不必做修改。程序采用了两种运行方式:一种系统自动运行探索,用递归方法实现;一种是由人工操作探索通路,这利用了手动操作8个代表不同的方向的键位来实现。用白色表示可走的路,棕色表示墙壁不可以通过。 Ⅳ.程序设计内容 Ⅳ.1设计界面 系统运行首先出现提示字符串“Please select hand(1)else auto”,询问是选择人工探索还是系统自动探索,当用户输入字符1按回车键后出现一个迷宫图,红色矩形块(表示探索物)出现在左上角,这是可以代表8个方向的字符选择通路,遇到墙壁不能通行,按回车键结束探索,如果这时探索物移动到右下角出口,则显示找到通路信息,否则显示没找到通路信息。如图1为人工探索通路的界面。 在提示信息后,如果输入的字符不是1,则系统自动查找通路,如果没有找到通路,则显示没有找到通路信息。如果找到通路,则用红色标记走过的路径。 图1 Ⅳ.2设计思路 程序首先要考虑迷宫的表示,这是一个二维关系图,典型的存贮储方式是选择二维数组,数组元素的值只有两种状态,所以取值为0或1,0表通路,1表示墙壁,这里取名为map。图形的显示就可以根据数组元素的值来确定。如果是人工探索,则根据按键来确定探索物的位置坐标,

JAVA课程设计题目及要求.

Java课程设计题目及要求 一、课程设计总体要求: 本次课程设计是对前面学过的所有面向对象的编程思想以及编程方法的一个总结、回顾和实践,学生确定设计题目后,要明确本次课程设计所要用到的技术点,回顾之前学习的这些知识点,或者到网上搜索以及查阅相关的书籍来搜集资料。通过编写一个基于JAV A的应用系统综合实例,来掌握Java语言编程技巧。 二、参考题目及要求: 学生可选择下面题目或者自定题目,但要求具有一定难度和复杂度,是一个较为完整的应用程序。 1、编写一个记事本程序 要求: 用图形用户界面实现。 能实现编辑、保存、另存为、查找替换等功能。 提示:使用文件输入输出流。 2、编写一个计算器程序 要求: 界面模拟Windows中的计算器程序。 实现基本数学运算、函数等功能:加、减、乘、除、阶乘、正弦、余弦和指数运算。 实现要点:添加相关组件并进行按钮事件处理和键盘事件处理。

3、模拟龟兔赛跑 要求: 用图形用户界面实现。 能设置比赛时间,马匹的数量等等。 在任意时间段内马匹的速度是随机的。 开始比赛之后以动画显示赛马过程。 提示:使用多线程,赛马也可换成其他。 4、学生信息管理系统 要求: 使用图形用户界面 用数据库建立1或2个学生信息表。(不限使用哪种数据库能连接数据库并实现查询、增、删、改等功能。 5、图书信息管理系统 要求: 使用图形用户界面 用数据库建立1或2个图书信息表。(不限使用哪种数据库能连接数据库并实现查询、增、删、改等功能。 6、ATM柜员机模拟程序

要求:使用图形用户界面。当输入给定的卡号和密码(初始卡号和密码为123456时,系统能登录ATM柜员机系统,用户可以按照以下规则进行: (1、查询余额:初始余额为10000元 (2、ATM取款:每次取款金额为100的倍数,总额不超过5000元,支取金额不允许透支。 (3、ATM存款:不能出现负存款。 (4、修改密码:新密码长度不小于6位,不允许出现6位完全相同的情况,只有旧密码正确,新密码符合要求,且两次输入相同的情况下才可以成功修改密码。 7、超市收银系统 要求:使用图形用户界面。 由收银员输入顾客的会员卡卡号(若有卡、所购商品的货号等。从数据库中取出有关价格信息,再把这些信息返回给收银台。同时把该收银台的销售总量和有关种类商品的剩余量以及该持卡顾客的消费情况交数据库存储以供查询。 另外,对没有卡的消费情况不记录该顾客的消费情况等个人信息。如果一个未持卡顾客一次购物满200元,可为其发放一张会员卡,以后在该商场购物可向9折优惠。 8、电话号码查询系统。 要求:有电话录入,修改,增加,删除,按姓名查询,按电话号码查询,按部门查询,按部门显示,显示所有电话号码信息,打印等功能。 三、整体要求: 建议使用Eclipse开发环境完成作业,界面友好,代码的可维护性好,有必要的注释。

C程序课程设计报告—走迷宫

C程序课程设计报告—走迷宫 一课题分析 1.1 设计要求 走迷宫:绘制和选择迷宫地图,系统能够自动寻找出口,支持鼠标和键盘操作。通过画图函数设定迷宫,运用数据结构的相关知识,利用一定的算法,实现单步找寻迷宫出口的操作。 1.2 实现功能 小游戏,游戏者从左侧入口处走到右侧的出口处,则胜;中途退出,则败。 二整体设计 2.1框架设计 1.定义操作键键码,用#define实现。 2.系统BGI初始化模块: 3.画出迷宫模块:其中包括边框、出口、入口、墙壁等相关信息;用函数drawmaze()实现此操作。 4.定义迷宫中的人模块:用函数move()实现此操作。实现点的移动,并判断是否到达出口。 5.退出系统模块:用if函数进行判断,如胜则输出-You win,如败则输出you lose.用函数getch()查看结果。 三详细设计 3.1界面设计 此游戏界面采用图形设计。 主界面设计如下:

图1 走迷宫图3.2结构设计: 用if语句实现人的坐标移动和判断游戏者输赢。 四总结 参考文献 暂无 附录#include #include /*定义操作键键码*/ #define UP 0x4800/*上移--方向键up*/ #define DOWN 0x5000/*下移--方向键down*/ #define LEFT 0x4b00/*左移--方向键left*/ #define RIGHT 0x4d00/*右移--方向键right*/ #define ESC 0x011b #define midx getmaxx()/2 #define midy getmaxy()/2

《数据结构课程设计》走迷宫游戏

信息工程学院 课程设计报告 课程名称《数据结构》 课题名称走迷宫游戏 专业 班级 学号 姓名 联系方式 指导教师 2015 年 12 月 27 日

目录 1、数据结构课程设计任务书............................................................... 1 1.1、题目........................................................................... 1 1.2、要求........................................................................... 1 2、总体设计............................................................................. 1 2.1、设计思路及总体组成框架......................................................... 1 2.2、操作流程图..................................................................... 2 3、详细设计............................................................................. 5 3.1、程序中所采用的数据结构及存储结构的说明......................................... 5 3.2、函数功能模块说明............................................................... 5 3.3、各函数的调用关系 ............................................................................................................................... 7 4、调试与测试:......................................................................... 7 4.1、调试方法与步骤:............................................................... 7 4.2、测试结果的分析与讨论:......................................................... 8 4.3、测试过程中遇到的主要问题及采取的解决措施:................................... 10 6、源程序清单......................................................................... 10 7、数据结构课程设计总结............................................................... 14 8、参考文献........................................................................... 14

java课程设计题目及要求 2011春

《Java与面向对象的程序设计》课程设计题目及要求 请同学们在下面的题目中任选一题来做,课程设计允许合作完成,合做的小组要写清分工: 题目1:(此题2人做)绘图应用程序。利用学过的GUI方法实现一个较为完整的绘图应用程序。用户可以选择要画的图形(如线,椭圆,圆,矩形,弧,圆角矩形,多边形,折线等等),选择画笔颜色和画笔粗度,用鼠标单击和拖拽等动作绘图。 参考界面:

题目2:(此题1人做)扩展PP9.9的题目要求,设计一个应用程序,能够绘制任意次数(不超过6次)的一元函数图像。其中次数和各项系数由用户动态指定,程序能够根据用户指定的各项系数来绘制函数图像。 参考界面:

题目3:(此题1人做)设计一个计算器应用程序,用于进行简单的加减乘除四则运算。要求能够对输入的算式判断运算符优先级,允许在表达式中出现常用的数学函数,如绝对值、取整、三角函数、倒数、平方根、平方、立方等。 参考界面:

题目4:(此题可2人做)使用课本PP4.7 创建的PairOfDice类,设计并实现一个类来玩Pig游戏,由用户和计算机进行比赛,每一轮中,每一个玩家掷一次骰子(一对)并且累计点数。最终目标是先达到100点的对手获胜。在任何一轮比赛中,如果玩家掷到一个1,则该轮的点数无效并且换对手掷骰子,而如果掷得两个1,则到目前为止所有的点数全部无效并且转交骰子控制权。每次掷完骰子后,当前的玩家可以自由选择继续掷(成为Pig)并且担当失去点子的风险,或者将骰子的控制权移交给对手!,但可能使对手赢得比赛。如果计算机在任何一轮中累计点数超过20则放弃骰子的控制权。( 见课本P189 PP5.40) 程序要求:(1) 用可视化编程控件实现该程序。 (2) 用户每次掷完骰子后,弹出对话框,询问用户是否继续掷骰子。(3) 显示计算机每次掷骰子的值, 每轮累加超过20后,计算机自动放弃控制骰子权限。 参考界面:

迷宫算法设计

《数据结构与算法设计》课程设计任务书

数据结构与算法设计课程设计 专业班级学号 姓名(签名)完成日期指导教师(签名) 1、程序设计说明书 【设计题目】迷宫设计 【问题描述】 在迷宫中求从入口到出口的一条简单路径。迷宫可用方块来表示,每个方块或者是通道或者是墙。“迷宫求解”这个经典的问题,应用栈这种数据结构设计一个方案,并在图形界面上实现从入口到出口的一条简单路径,设计这个游戏可以加强自己的编程能力,自己找通路时还可以加强观察能力。 【软件功能】 1、求解迷宫通路的图形界面演示程序,根据用户界面提示自定义迷宫。 2、根据用户界面提示,用键盘输入,Home键设置迷宫起点,End键设终点,上 下左右箭头键移动,Enter键添加墙,Del键删除墙,完成后按F9键演示,演示完毕后可F5刷新题图,重新对地图的起点、终点、障碍进行设置,Esc 键退出; 3、在找迷宫通路的过程中,演示查找的过程并查找成功的一条路径。 4、用户可以通过界面上提供的菜单选项,选择“A*算法求最短路径”演示求解迷宫最短路径。 【算法思想】 1、以一个长方阵表示迷宫,采用数组对迷宫信息进行存储,数组中的元素的值 表示迷宫对应位置的内容。0表示迷宫对应位置可通过;1表示迷宫对应位置为墙;2表示迷宫对应位置为已经走过的足迹3,表示迷宫对应位置是从栈中弹出的点,并且不能再次通过;4表示迷宫对应位置为起点,保证起点不可通过。 2、在设计走迷宫算法的过程中,主要是利用栈对路径信息进行存储,类Node, 定义了栈中存储的节点元素的类型,栈中的元素采用链式存储的结构。 3、采用A*算法,找到起点到终点的最短路径; 4、采用回溯算法控制并绘制人物在迷宫图形界面窗口中的位置。 5、用java编程语言,有简单、美观的图形界面。 【逻辑结构设计】 运行程序,进入设置迷宫大小界面,输入行和列的值点击生成迷宫按钮进入迷宫自定义界面,根据操作菜单中的帮助选项,用键盘上的按键进行自定义操作(设置迷宫的起点、终点和墙)按F9或者操作菜单中的A*算法寻找最短路径选项即可实现对应的通路。

JavaSE课程设计基本要求

JavaSE程序设计课程设计 时间:一周 本课程设计是在学完成JavaSE相关知识的.z基础上,对所学知识的综合整理和应用的过程。通过对相关题目的分析、设计与实现,加深JavaSE基本知识的理解;提高设计和编程能力;体会面向对象的设计思想;了解熟悉外包软件设计的过程及基本模式;为后续课程打下坚实基础。 一、基本要求 设计一个简单的图形用户界面的应用程序,用于管理相关信息。或相关的其他题目。 主要知识点:类与对象、继承与多态、抽象类与接口、图形用户界面设计及事件处理、对话框及输入输出处理、异常处理、多线程、套接字Socket的使用、泛型与集合框架、JDBC数据库访问及操作、反射及枚举。 1、窗口界面有相关区域,可包含主菜单及相关菜单项、如文本显示区、下拉列表框、标签及相应的按钮,有些选项可弹出对话框提示。(界面设计合理、美观、方便)。 2、如学生信息管理理、成绩管理、图书管理、考勤管理等相关内容。包含新建、添加、修改、查询、删除等相关功能。 3、相关信息的存储于相关数据库中。主要掌握Java中JDBC数据库操作的基本步骤,注意后期数据库工具类的使用。 4、要综合运用JavaSE相关知识,以基础教程实践篇4-6,高级教程实践篇2-6为参考设计过程。 5、项目设计采用相关的层次框架模式结构完成:不同的包中存放完成不同功能的类。可分为:视图层(viewbo)、数据库访问层(db)、模型层(entity),即对应的几个包。 6、设计报告书写要规范,按目录、前言、正文、结论与建议、致谢、参考文献及附录的基本步骤整理。 7、不准雷同,独立完成或两人合作完成。 8、一周后上交课程设计说明书及相关源程序及运行程序。

C语言课程设计--迷宫

C语言课程设计报告题目:迷宫问题 姓名: 班级: 学号: 组员: 指导教师: 学院: 专业:

课程设计(报告)任务及评语

目录 第1章课程设计的目的与要求 (1) 1.1 课程设计目的 (1) 1.2 课程设计的实验环境 (1) 1.3 课程设计的预备知识 (1) 1.4 课程设计要求 (1) 第2章课程设计内容 (2) 2.1程序功能介绍 (2) 2.2程序整体设计说明 (2) 2.2.1设计思路 (2) 2.2.2数据结构设计及用法说明 (3) 2.2.3程序结构(流程图) (4) 2.2.4各模块的功能及程序说明 (6) 2.2.5程序结果 (7) 2.3程序源代码及注释 (7) 第3章课程设计总结 (17) 参考资料 (18)

第1章课程设计的目的与要求 1.1 课程设计目的 本课程设计是计算机科学与技术专业重要的实践性环节之一,是在学生学习完《程序设计语言(C)》课程后进行的一次全面的综合练习。本课程设计的目的和任务: 1. 巩固和加深学生对C语言课程的基本知识的理解和掌握 2. 掌握C语言编程和程序调试的基本技能 3. 利用C语言进行基本的软件设计 4. 掌握书写程序设计说明文档的能力 5. 提高运用C语言解决实际问题的能力 1.2 课程设计的实验环境 硬件要求能运行Windows 2000/XP操作系统的微机系统。C语言程序设计及相应的开发环境。 1.3 课程设计的预备知识 熟悉C语言及C语言开发工具。 1.4 课程设计要求 1. 分析课程设计题目的要求 2. 写出详细设计说明 3. 编写程序代码,调试程序使其能正确运行 4. 设计完成的软件要便于操作和使用 5. 设计完成后提交课程设计报告

Java课程设计可选题目及任务书

Java语言课程设计任务书及题目 一、Java语言课程设计目的和要求 1.目的: 1)复习、巩固Java语言的基础知识,进一步加深对Java语言的理解和掌握;2)课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。 提高学生适应实际,实践编程的能力; 3)培养学生在项目开发中团队合作精神、创新意识及能力。 2.要求: 1、对系统进行功能模块分析、控制模块分析正确,符合课题要求,实现相应 功能;可以加以其他功能或修饰,使程序更加完善、合理; 2、系统设计要实用,编程简练,可用,功能全面 3、说明书、流程图要清楚 4、记录设计情况(备查,也为编写设计说明书作好准备); 5、要求采用模块化程序设计方法,及锯齿型书写格式,要求上机调试通过和 按设计报告格式。 6、设计上交内容:设计报告一份,包括课程设计目的、要求、源程序文件、 运行结果。 二、Java语言课程设计选题如下: 1、课题:算术运算测试 功能要求:该程序用字符界面实现十道100以内加减法数学题,能根据题目计算出答案,与输入答案对比,判断做题是否正确,最后计算分数。 界面要求:用字符界面实现、也可用图形界面实现。 2、课题:猜数游戏 功能要求:计算机产生随机数,猜中即胜,猜不中,提示是大了还是小了, 继续猜,直至猜到,给出所用时间和评语。 界面要示:用字符界面实现、也可用图形界面实现。 3、学生成绩管理 功能要求: 1)输入十个同学的学号,姓名,四科成绩(应用数学、大学英语、Java程 序设计、计算机应用基础) 2)计算出平均成绩。以平均成绩降序输出成绩表。 3)输出全组各科平均分,最高分和最低分。 4)输入姓名查询成绩 界面要示:用字符界面实现、也可用图形界面实现。 4、计算器模拟程序

C++课程设计迷宫小游戏

温馨提示 程序语言:C、C++、C#、Python(红色字体表示本课设使用的程序设计语言) 图形功能选项:Win32控制台程序(黑框、文本界面)、Win32程序、MFC、WinForm、DirectX10(黑体标明表示本课设的程序图形类别,默认为非图形界面Win32控制台程序) 数据结构:基础类型、数组、链表、双向链表、搜索树(非平衡二叉树)、平衡二叉树、链表与平衡二叉树相结合、堆栈、队列、串、图(黑体标明表示本课设使用的数据结构) C++语言项:STL库(黑体标明表示使用C++的STL库) 编译环境:Windows 7 64位旗舰版(Linux及其他环境请谨慎下载) 集成开发环境:Visual C++ 6.0、DEVC++、CodeBlocks、Visual Studio 2015均可通过编译。(浅蓝色字体表示需要运行修改后的版本,请用户自行选择源代码测试) 分多头文件编译:否(所有代码基本都包含在一个文件内,如需试验头文件功能,请自行参考相关文献) 内容说明: 1、课设题目及预览内容将在第二页开始展示。 2、代码行数:525行 3、目录所示内容,本文基本涵盖,如无内容,会在本页进行说明。 4、附录绝对包含用户使用手册及程序完整源代码和详细注释。 5、如需下载其他头文件(例如DirectX需另行配置),本文会在此进行说明。 6、本文撰写内容仅供学习参考,另外,由于本人水平有限,编写之处难免存在错误 和纰漏,恳请各位老师或同学批评指正。

题目:基于C++控制台游戏的设计 任务要求: 1.代码量不低于300行,至少有5个函数,不得存在重复代码。 2.游戏设计具有一定可玩性,设计至少3关,界面和交互性友好,不得存在BUG。 3.每个人书写一份课程设计报告,报告中包含如下内容: (1)题目简介(一段题目的简单介绍,一段题目开发的硬软要求) (2)功能模块划分 (3)界面设计 (4)详细设计(流程图,或代码,每一部分代码要有相应的文字说明) (5)遇到的问题及解决办法(5个问题以上) (6)总结与展望 本课设文档基于迷宫游戏进行课程设计。 运行截图如下:

《Java课程设计》需求分析文档要求

目录 1. 选题背景 (1) 2. 开发技术概述 (1) 3. 功能需求分析 (1) 4. 功能设计 (2) 4.1 登录界面功能表 (2) 4.2 注册界面功能表 (3) 4.3 聊天界面功能表 (4) 4.4 文件功能表 (5) 5. 系统流程分析 (5) 5.1 系统总体设计流程图 (5) 5.2 详细设计流程图 (6) 6. 界面设计 (9) 6.1 登录界面 (9) 6.2 注册界面 (9) 6.3 聊天界面 (10) 7. 系统测试 (11) 8. 关键代码说明 (13) 小结 (16) 参考文献 (17)

1. 选题背景 在网络越来越发达的今天,人们对网络的依赖越来越多,越来越离不开网络,由此而产生的聊天工具越来越多.目前国内外做即时通讯软件的公司很多,产品也琳琅满目,国内有诸如腾讯QQ、新浪UC、网易泡泡、淘宝旺旺等,国外有著名的MSN(新版改名为Live Messenger)以及跨平台的米聊等。 QQ是国内即时通讯软件市场上无可争议的“老大”,您使用QQ可以与好友交流,信息及时发送,及时回复,收发及时功能全面。QQ与国外最大的即时通讯软件MSN功能强大,但它们唯一不足的地方就是必须要联网或者下载到它们的服务端,否则无法脱离Internet使用。 本聊天系统,是可以在局域网聊天的一个工具。无需联网,即可进行群聊。所以也存在局限性,只有在同一局域网内的用户才能聊天交流,除此之外,该系统未设置私聊功能。 2. 开发技术概述 本系统采用java技术开发,使用文件保存数据,集成开发环境使用eclipse。开发者应有java程序设计语言、SWING基本GUI组件、多线程、文件使用、socket编程、使用eclipse 的基本知识和技能。系统采用两层c/s体系结构,c端负责通过GUI与客户交互,实现注册、登录、收发信息、退出等功能;c端和s端是通过网络交互的。 首先服务器启动,建立一个专门用于接收客户端请求的”倾听Socket”,然后等待客户的连接请求。当客户想聊天时,从界面输入信息,然后与服务器建立Socket连接,服务器端的“倾听Socket”收到连接请求后,一般会接收连接请求,并生成一个服务器端socket,专门负责与此客户端socket的通信。一旦连接请求成功,通过I/O流来实现数据的输入输出。用多线程来实现多人聊天功能。 3. 功能需求分析 使得第一次使用的用户可以通过填写个人信息来注册,已注册用户可以在验证他的登录信息后登录,允许在线用户查看其他在线用户的列表,允许用户在公共聊天室中聊天。客户端和用户端的需求如下: a.客户端 (1)用户注册界面及结果 (2)用户登录界面及结果 (3)用户发送信息及结果 (4)用户得到信息及结果 (5)用户退出界面及结果 b.服务器端 (1)处理用户注册 (2)处理用户登录 (3)处理用户发送信息 (4)处理用户退出 (5)保存服务器日志 (6)保存用户聊天信息

Java课程设计

课程设计 (12信息1班) 一、题目 1、设计一个窗口,其中包含一个文本区、两个复选框和3个横向滑动条,其中滑动条用来调整RGB三色的分量从0~255变化;两个复选框分别用于设定把滑动条调出的颜色用于文本区的前景色还是背景色。 2、设计一个记事本:记事本程序可以提供一种简单的文本内容编辑环境,同时允许各种常见的文件读取和写入操作。 3、设计一个画笔程序。提供一种简单实用的图形编辑环境,允许用户选择指定颜色和指定图形来绘制各种常见形状,同时还能存储和读取图像文件。 4、设计一个窗口用来输入学生的相关信息。如姓名,学号,联系方式,家庭住址等信息。 5、用Java语言设计两个多项式相加的操作。要求可以根据输入的多项式系数和指数创建多项式,并完成两个多项式相加的操作。 6、用Java语言设计算法,根据给定的字符及其权值构造Huffman树,并能求出相应字符的Huffman编码。 7、用Java语言设计排序算法(至少6种),对1万个随机生成的数据进行排序,比较各排序算法的优劣。 8、设计一个日历。 9、设计一个小游戏。九宫格是一种传统的游戏程序,通过生成随机排列的数字方块,允许用户童工单机来移动方块,不过只有靠近空格的方块才能被移动。当所有的数字按序排列整齐后,游戏程序即告结束。 10、设计一个五子棋程序。五子棋程序是一种常见的棋类游戏程序,对弈双方轮流下子,直到有一方有5颗棋子在行、列或者两个对角线方向上连续摆放,程序即告结束,该方胜利。 选题说明:原则上每位同学任意选题,尽量均匀分布。

二、课程设计时间安排 星期一星期二星期三星期四星期五 上午上午上午 下午下午下午下午下午(答辩)周一和周四上午9:30-11:30,其余时间均为:上午8:30-11:30,下午14:30-17:00。 三、课程设计报告要求 课程设计报告在课题结束的一周内上交,包含以下内容: 一、题目要求描述 二、设计思路和需用到的基本知识(所用的类和主要方法) 三、程序源码 四、运行结果 五、课程设计小结

相关文档
最新文档