java实验报告.docx

上传人:b****3 文档编号:4155725 上传时间:2023-05-06 格式:DOCX 页数:33 大小:388.05KB
下载 相关 举报
java实验报告.docx_第1页
第1页 / 共33页
java实验报告.docx_第2页
第2页 / 共33页
java实验报告.docx_第3页
第3页 / 共33页
java实验报告.docx_第4页
第4页 / 共33页
java实验报告.docx_第5页
第5页 / 共33页
java实验报告.docx_第6页
第6页 / 共33页
java实验报告.docx_第7页
第7页 / 共33页
java实验报告.docx_第8页
第8页 / 共33页
java实验报告.docx_第9页
第9页 / 共33页
java实验报告.docx_第10页
第10页 / 共33页
java实验报告.docx_第11页
第11页 / 共33页
java实验报告.docx_第12页
第12页 / 共33页
java实验报告.docx_第13页
第13页 / 共33页
java实验报告.docx_第14页
第14页 / 共33页
java实验报告.docx_第15页
第15页 / 共33页
java实验报告.docx_第16页
第16页 / 共33页
java实验报告.docx_第17页
第17页 / 共33页
java实验报告.docx_第18页
第18页 / 共33页
java实验报告.docx_第19页
第19页 / 共33页
java实验报告.docx_第20页
第20页 / 共33页
亲,该文档总共33页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

java实验报告.docx

《java实验报告.docx》由会员分享,可在线阅读,更多相关《java实验报告.docx(33页珍藏版)》请在冰点文库上搜索。

java实验报告.docx

java实验报告

Java上机实验报告

姓名:

班级:

学号:

日期:

指导老师:

 

-----------------------------------目录---------------------------------

 

1、实验目的------------------------------------------------------2

2、实验开发环境和工具--------------------------------------------2

3、实验内容------------------------------------------------------2

4、问题描述------------------------------------------------------3

5、需求和规格说明------------------------------------------------3

6、概要设计------------------------------------------------------3

7、详细设计流程图------------------------------------------------18

8、游戏截图------------------------------------------------------26

9、调试报告------------------------------------------------------29

10、讨论分析-----------------------------------------------------29

11、体会---------------------------------------------------------32

一、实验目的

1.了解和掌握Java基本概念和语法

2.了解和掌握Java图形界面编程的基本概念和用法

3.了解和掌握Java事件编程的基本概念和用法

4.了解和掌握JavaIO基本功能和用法

二、实验开发环境和工具

Windows操作系统开发环境,可使用集成开发环境Jcreator,使用Java语言,工具包使用JDK1.7。

三、实验内容

设计一个基于图形界面、事件编程、IO的小软件,实现一个具有图形界面和进度存盘功能的小游戏(例如字母游戏、俄罗斯方块、坦克大战等)或者具有图形界面和存储聊天记录功能的聊天软件。

也可以实现任意其他形式的小软件(但必须具备图形界面,能够响应用户事件,并且具有存盘功能,拓展所实现的小软件,增加网络通信的功能。

四、问题描述

设计一个窗口贪吃蛇游戏,实现一只人为操动的小蛇努力寻找猎物。

游戏设置关卡,当捕食到一定猎物之后,游戏难度增加,小蛇的移动速度加快,蛇的长度代表其捕食猎物的数量。

五、需求和规格说明

利用函数使蛇的移动速度加快,利用多线程的方法设计游戏,当游戏成功或者游戏失败时,出现弹窗提示游戏进程。

利用鼠标事件,键盘事件操控小蛇,在面板上绘出游戏框图。

六、概要设计

需要用到的类:

客户端:

importjava.awt.*;

importjava.awt.event.*;

importjavax.swing.JOptionPane;

import.Socket;

importjavax.swing.JButton;

importjavax.swing.JFrame;

主类:

publicclassKingSnake

{

publicstaticvoidmain(String[]args){

//TODOAuto-generatedmethodstub

newMyWindow();}}

用来辅助功能实现的类:

classabc{

staticinta=5,i=1;

staticlongb=100;

staticbooleangg=false;

staticbooleanbg=true;

}

自定义面板类,继承了键盘和线程接口,实现用键盘控制蛇,及游戏通关等进程

classMyPanelextendsPanelimplementsKeyListener,Runnable

{

abcqt=newabc();//再次声明辅助函数

Buttonsnake[];//定义蛇按钮

intshu=0;//蛇的节数

intfood[];//食物数组

Threadthread;//定义线程

staticintweix,weiy;//食物位置

intfangxiang=0;//蛇移动方向

intx=0,y=0;//蛇头位置

MyPanel()//定义蛇体和食物并为蛇头添加键盘监视器

{

setLayout(null);

snake=newButton[20];

food=newint[20];

thread=newThread(this);

 

for(intj=0;j<99;j++)

{

food[j]=(int)(Math.random()*20);//定义20个随机食物

}

weix=(int)(food[0]*0.1)*60;//十位*60为横坐标

weiy=(int)(food[0]%10)*40;//个位*40为纵坐标

for(inti=0;i<20;i++)

{

snake[i]=newButton();

}

add(snake[0]);

snake[0].setBackground(Color.black);

snake[0].addKeyListener(this);//为蛇头添加键盘监视器

snake[0].setBounds(0,0,10,10);

setBackground(Color.cyan);

}

publicvoidrun()//接收线程

{

 

while(t)

{

 

if(fangxiang==0)//向右

{

try

{

thread.sleep(qt.b);

x+=qt.a;

snake[0].setLocation(x,y);//设置蛇头位置

if(x==weix&&y==weiy)//蛇头位置与食物位置一样,吃到食物

{

shu++;

weix=(int)(food[shu]*0.1)*60;

weiy=(int)(food[shu]%10)*40;

repaint();//重绘下一个食物

add(snake[shu]);//增加蛇节数和位置

snake[shu].setBounds(snake[shu-1].getBounds());

}

thread.sleep(qt.b);//睡眠qt.bms

}

catch(Exceptione){}

}

elseif(fangxiang==1)//蛇头向左移动

{

try

{

thread.sleep(qt.b);

x-=qt.a;

snake[0].setLocation(x,y);

if(x==weix&&y==weiy)

{

shu++;

weix=(int)(food[shu]*0.1)*60;

weiy=(int)(food[shu]%10)*40;

repaint();

add(snake[shu]);

snake[shu].setBounds(snake[shu-1].getBounds());

}

thread.sleep(qt.b);

}

catch(Exceptione){}

}

elseif(fangxiang==2)//向上

{

try

{

thread.sleep(qt.b);

y-=qt.a;

snake[0].setLocation(x,y);

if(x==weix&&y==weiy)

{

shu++;

weix=(int)(food[shu]*0.1)*60;

weiy=(int)(food[shu]%10)*40;

repaint();

add(snake[shu]);

snake[shu].setBounds(snake[shu-1].getBounds());

}

thread.sleep(qt.b);

}

catch(Exceptione){}

}

elseif(fangxiang==3)//向下

{

try

{

thread.sleep(qt.b);

y+=qt.a;

snake[0].setLocation(x,y);

if(x==weix&&y==weiy)

{

shu++;

weix=(int)(food[shu]*0.1)*60;

weiy=(int)(food[shu]%10)*40;

repaint();

add(snake[shu]);

snake[shu].setBounds(snake[shu-1].getBounds());

}

thread.sleep(qt.b);

}

catch(Exceptione){}

}

intnum1=shu;

while(num1>1)

{

if(snake[num1].getBounds().x==snake[0].getBounds().x&&snake[num1].getBounds().y==snake[0].getBounds().y)//判断是否咬自己的尾巴

{

qt.bg=false;

}

num1--;

}

if(x<0||x>=this.getWidth()||y<0||y>=this.getHeight())//判断是否撞墙

{

t=false;

result=false;

qt.bg=false;

repaint();

}

intnum=shu;

while(num>0)//设置蛇节位置

{

snake[num].setBounds(snake[num-1].getBounds());

num--;

}

 

if(shu==7)//如果蛇节数等于7则胜利

{

t=false;

result=true;

qt.gg=true;

repaint();

}

}

 

}

publicvoidkeyPressed(KeyEvente)//按下键盘方向键

{

if(e.getKeyCode()==KeyEvent.VK_RIGHT)//右键

{

if(fangxiang!

=1)//如果先前方向不为左

fangxiang=0;

 

}

elseif(e.getKeyCode()==KeyEvent.VK_LEFT)

{if(fangxiang!

=0)

fangxiang=1;

 

}

elseif(e.getKeyCode()==KeyEvent.VK_UP)

{if(fangxiang!

=3)

fangxiang=2;

 

}

elseif(e.getKeyCode()==KeyEvent.VK_DOWN)

{if(fangxiang!

=2)

fangxiang=3;

 

}

}

publicvoidkeyTyped(KeyEvente)

{

}

publicvoidkeyReleased(KeyEvente)

{

}

publicvoidpaint(Graphicsg)//在面板上绘图

{

intx1=this.getWidth()-1;

inty1=this.getHeight()-1;

g.setColor(Color.red);

g.fillOval(weix,weiy,10,10);//食物

g.drawRect(0,0,x1,y1);//墙

if(qt.bg==false)

{g.drawString("游戏失败!

",250,200);//输出游戏失败

intoption=JOptionPane.showConfirmDialog(null,"游戏失败,是否继续","是否继续",JOptionPane.YES_NO_OPTION);//设置确认消息框

if(option==JOptionPane.YES_OPTION)//选择确认按钮

{

qt.bg=true;

newMyWindow();

}elseif(option==JOptionPane.NO_OPTION)//选择取消按钮

{

System.exit(0);//退出游戏

}

}

if(qt.gg==true)

{g.drawString("恭喜过关",250,200);//输出游戏成功

intoption=JOptionPane.showConfirmDialog(null,"恭喜过关","是否继进入下一关",JOptionPane.YES_NO_OPTION);

if(option==JOptionPane.YES_OPTION){

qt.gg=false;

qt.b=qt.b/4;

qt.i++;

newMyWindow();

}elseif(option==JOptionPane.NO_OPTION){

System.exit(0);

}}

}

}

自定义窗口类,控制程序启动

classMyWindowextendsFrameimplementsActionListener{

MyPanelmy;

Buttonbtn;

Panelpanel;

MyWindow()

{

super("KingSnake");

my=newMyPanel();

btn=newButton("begin");

panel=newPanel();

btn.addActionListener(this);

panel.add(newLabel("欢迎来到第关begin后请按Tab键选定蛇"));

panel.add(btn);

panel.add(newLabel("按上下左右键控制蛇行动"));

add(panel,BorderLayout.NORTH);

add(my,BorderLayout.CENTER);

setBounds(100,100,610,500);

setVisible(true);

validate();

addWindowListener(newWindowAdapter()

{

publicvoidwindowClosing(WindowEvente)

{

System.exit(0);

}

});

}

publicvoidactionPerformed(ActionEvente)//按下begin按钮

{

if(e.getSource()==btn)

{

try

{

my.thread.start();//开始线程

my.validate();

}

catch(Exceptionee){}

}

}}

 

实现通信功能代码:

classSnakeextendsJFrameimplementsActionListener{

privateJButtonbtConnect=newJButton("连接");

@SuppressWarnings("unused")

privateSocketsocket;

publicSnake(){

super("客户端aaa");

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.add(btConnect,BorderLayout.NORTH);

btConnect.addActionListener(this);

this.setSize(300,100);

this.setVisible(true);

}

publicvoidactionPerformed(ActionEvente){

try{

socket=newSocket("127.0.0.1",9999);

this.setTitle("连接成功,您的分数为"+MyPanel.score);

}catch(Exceptionex){

ex.printStackTrace();

}

}

}

服务器代码:

import.ServerSocket;

import.Socket;

importjavax.swing.JFrame;

@SuppressWarnings("serial")

publicclassServerextendsJFrame{

privateServerSocketss;

privateSocketsocket;

publicServer(){

super("服务器端,目前未见链接");

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setSize(300,100);

this.setVisible(true);

try{

ss=newServerSocket(9999);

socket=ss.accept();

StringclienAddress=socket.getInetAddress().getHostAddress();

this.setTitle("客户"+clienAddress+"连接");

}catch(Exceptionex){

ex.printStackTrace();

}

}

publicstaticvoidmain(String[]args){

newServer();

}

}

 

七、详细设计流程图

publicstaticvoidmain(String[]args){

 

newMyWindow();

}

----------------------------------------------------------------------------------------------------

if(x<0||x>=this.getWidth()||y<0||y>=this.getHeight())//判断是否撞墙

{

t=false;

result=false;

qt.bg=false;

repaint();

}

intnum=shu;

while(num>0)//设置蛇节位置

{

snake[num].setBounds(snake[num-1].getBounds());

num--;

}

if(shu==7)//如果蛇节数等于7则胜利

{

t=false;

result=true;

qt.gg=true;

repaint();

}

}

}

-----------------------------------------------------------------------------------------------------------------------

publicvoidkeyPressed(KeyEvente)//按下键盘方向键

{

if(e.getKeyCode()==KeyEvent.VK_RIGHT)//右键

{

if(fangxiang!

=1)//如果先前方向不为左

fangxiang=0;

}

elseif(e.getKeyCode()==KeyEvent.VK_LEFT)

{if(fangxiang!

=0)

fangxiang=1;

}

elseif(e.getKeyCode()==KeyEvent.VK_UP)

{if(fangxiang!

=3)

fangxiang=2;

}

elseif(e.getKeyCode()==KeyEvent.VK_DOWN)

{if(fangxiang!

=2)

fangxiang=3;

}

}

if(option==JOptionPane.YES_OPTION){

qt.bg=true;

newMyWindow();

}elseif(option==JOptionPane.NO_OPTION){

System.exit(0);

}

}

if(qt.gg==true)

{g.drawString("YOUWIN!

",250,200);//输出游戏成功

intoption=JOptionPane.showConfirmDialog(null,"恭喜过关","是否继进入下一关",JOptionPane.YES_NO_OPTION);

if(option==JOptionPane.YES_OPTION){

qt.gg=false;

qt.b=qt.b/4;

qt.i++;

newMyWindow();

}elseif(option==JOptionPane.NO_OPTION){

System.exit(0);

}}

}

publicvoidactionPerformed(ActionEvente)//按下begin按钮

{

if(e.getSource()==btn)

{

try

{

my.thread.start();//开始线程

my.validate();

}

catch(Exceptionee){}

}

}}

MyPanel()

{

setLayout(null);

snake=newButton[20];

food=newint[20];

thread=newThread(this);

for(intj=0;j<99;j++)

{

food[j]=(int)(Math.random()*99);//定义20个随机食物

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2