最新范文 方案 计划 总结 报告 体会 事迹 讲话 倡议书 反思 制度 入党

程序设计实验报告4

日期:2020-06-20  类别:最新范文  编辑:一流范文网  【下载本文Word版

程序设计实验报告4 本文关键词:程序设计,实验,报告

程序设计实验报告4 本文简介:实验报告四课程名称程序设计基础实验日期4月27日实验项目名称数组的应用实验地点1#606实验类型□验证型√设计型□综合型学时2一、实验目的及要求(本实验所涉及并要求掌握的知识点)1、了解并掌握数组的定义、初始化和引用。2、熟练掌握筛法的思想与设计步骤。3、熟练掌握二分查找法的思想与设计步骤。4、熟练

程序设计实验报告4 本文内容:

实验报告四

课程名称

程序设计基础

实验日期

4月27日

实验项目名称

数组的应用

实验地点

1#606

实验类型

□验证型

√设计型

□综合型

2

一、实验目的及要求(本实验所涉及并要求掌握的知识点)

1、了解并掌握数组的定义、初始化和引用。

2、熟练掌握筛法的思想与设计步骤。

3、熟练掌握二分查找法的思想与设计步骤。

4、熟练掌握冒泡排序算法的思想与设计步骤。

二、实验环境(本实验所使用的硬件设备和相关软件)

安装XP操作系统的电脑一台

Microsoft

Visual

C++6.0软件

三、实验内容、步骤及结果

1、

采用筛法求1-100间所有的素数,并且每行输出7个。

#include

#include

int

main()

{

int

count,i,m,n;

count=0;

for(m=2;m<=100;m++){

n=sqrt(m);

for(i=2;in){

printf(“%6d“,m);

count++;

if(count%7==0)

printf(“/n“);

}

}printf(“/n“);

return

0;

}

2、

请按由大到小的次序输入十个整数,再输入一个整数x,采用二分查找法查找x在该数列中的位置,若找到,则显示位置;否则,提示“NO

FOUND”。

#include

int

main()

{

int

a[10]={10,9,8,7,6,5,4,3,2,1};

int

low,high,mid,n=10,x;

printf(“Enter

x:“);

scanf(“%d“,low=0;high=n-1;

while(low<=high){

mid=(low+high)/2;

if(x==a[mid])

break;

else

if(x

high=mid-1;

else

low=mid+1;

}

if(low<=high)

printf(“Index

is

%d/n“,mid);

else

printf(“NOT

found/n“);

return

0;

}

3、

请输入十个整数,采用冒泡排序法按由小到大的次序排序后输出。

#include

#include

int

main(int

argc,char*

argv[]){

int

i,a[10],*p;p=a;

void

sort(int*p);

printf(“请输入数组a。/n“);

for(i=0;i<10;i++)scanf(“%d“,printf(“原数组a为。/n“);

for(i=0;i<10;i++)

printf(“%3d“,a[i]);

printf(“/n“);

sort(p);

printf(“排序后数组a为。/n“);

for(i=0;i<10;i++,p++)

printf(“%3d“,*p);

printf(“/n“);}

void

sort(int*p){

int

i,j,t;

for(i=0;i<9;i++)

for(j=0;j*(p+j+1))

{

t=*(p+j);(p+j)=*(p+j+1);(p+j+1)=t;

}

}

4、

一个数如果从左往右读和从右往左读是相同的,则称这个数为回文数,比如898,1221,15651都是回文数。求:既是回文数又是质数的5位十进制数有多少个?

#include

#include

void

main()

{

int

i,j,m,n,p,q,count,sum=0;

int

v;

for(i=10000;i<=99999;i++)

{

m=i/10000;

q=i%10;

n=(i%10000)/1000;

p=(i%100)/10;

v=

1;

if((m==q)j*j

if(i%j==0)

{

v

=

0;

break;

}

if(v)

{

sum++;

}

}

}

printf(“%d/n“,sum);

}

5、N盏灯排成一排,从1到N按顺序依次编号。有N个人也从1到N依次编号,第一个人(1号)将灯全部关闭。第二个人(2号)将凡是2和2的倍数的灯打开。第三个人(3号)将凡是3和3的倍数的灯做相反处理(该灯如为打开的,将它关闭;如为关闭的,将它打开)。以后的人都和3号一样,将凡是与自己相同的灯和是自己编号倍数的灯做相反处理。请问:当第N个人操作之后,哪几盏灯是点亮的?

四、实验总结(对本实验结果进行分析,实验心得体会及改进意见)

通过本次实验,我进一步了解和掌握了掌握数组的定义、初始化和引用。,并成功了几个程序的编写。但是,在这个过程中也暴漏出来一些问题,比如,对的二分查找法的思想与设计步骤使用不够熟练,在今后的学习中,我会努力学习理论知识,同时加强自己的动手能力,做到理论与实践相结合,真正提高自己的专业水平。

实验评语

实验成绩

指导教师签名:

2013年4月27日

篇2:《网络程序设计》教师实验报告

《网络程序设计》教师实验报告 本文关键词:实验,教师,报告,网络程序设计

《网络程序设计》教师实验报告 本文简介:《网络程序设计》教师实验报告学院:信息科学与技术学院专业:学期:2013~2014学年第一学期教师:I目录实验1熟悉C#运行环境11.1实验目的11.2实验预习11.3实验任务1实验2结构化程序设计32.1实验目的32.2实验预习32.3实验任务3实验3使用数组63.1实验目的63.2实验预习63.

《网络程序设计》教师实验报告 本文内容:

《网络程序设计》

教师实验报告

院:信息科学与技术学院

业:

期:2013~2014学年第一学期

师:

I

目录

实验1

熟悉C#运行环境1

1.1

实验目的1

1.2

实验预习1

1.3

实验任务1

实验2

结构化程序设计3

2.1

实验目的3

2.2

实验预习3

2.3

实验任务3

实验3

使用数组6

3.1

实验目的6

3.2

实验预习6

3.3

实验任务6

4.1

实验目的9

4.2

实验预习9

4.3

实验任务9

实验5

继承和接口设计12

5.1

实验目的12

5.2

实验预习12

5.3

实验任务12

实验6

创建Windows

应用程序16

6.1

实验目的16

6.3

实验任务16

实验7

用户界面设计(一)20

7.1

实验目的20

7.2

实验预习20

7.3

实验任务20

实验8

用户界面设计(二)23

8.1

实验目的23

8.2

实验预习23

8.3

实验任务23

24

实验1

熟悉C#运行环境

院(系):信息科学与技术学院课程名称:网络程序设计教师签名:

班级

信B1211、12

学号

实验室

专业

姓名

计算机号

实验名称

所用软件

实验成绩

1.1

实验目的

1.了解和掌握C#语言的主要特点。

2.熟悉C#语言的程序开发环境,掌握C#语言的上机步骤。

3.熟练掌握源程序的建立、编辑、编译、保存和运行的基本方法。

4.会编写简单的控制台程序和Windows应用程序。

1.2

实验预习

1.熟悉Visual

C#的启动和退出以及Visual

C#中的编辑、编译、连接和运行命令。

2.了解Visual

C#开发环境的配置。

1.3

实验任务

1.Visual

C#的启动。启动成功的界面截图如下:

2.认识Visual

C#的菜单栏、工具栏,工具箱,解决资源方案管理器,代码编辑窗口。分别截图如下:

3.完成一个简单的控制台程序的编写、运行。并将结果截图。

4.完成一个简单的Windows程序的编写、运行。并将结果截图。

实验2

结构化程序设计

院(系):信息科学与技术学院课程名称:网络程序设计教师签名:

班级

信B1211、12

学号

实验室

专业

姓名

计算机号

实验名称

所用软件

实验成绩

2.1

实验目的

1.认识C#语言,熟悉C#语言的语法结构。

2.掌握C#语言中4种基本数据类型的特点、数据类型变量的定义及使用。

3.掌握不同数据类型运算时,数据类型的转换规则。

4.熟练掌握赋值语句。

5.掌握C#语言中表达式语句以及不同运算符的运算规则和优先级。

2.2

实验预习

1.熟悉各种数据类型变量的定义形式。

2.各种数据类型的取值范围。

3.各类运算符的优先级和结合规则。

4.常量与变量的区别和联系。

2.3

实验任务

1.设计一个控制台程序Proj3-8,定义变量int

a=2,b=3;

float

x=3.5f,y=2.5f;并求表达式(float)(a+b)/2+(int)x%(int)y的值。【要求写出代码,并将运行结果截图】

using

System;

using

System.Collections.Generic;

using

System.Text;

namespace

Proj3_8

{

class

Program

{

static

void

Main(string[]

args)

{

int

a

=

2,b

=

3;

float

x

=

3.5f,y

=

2.5f;

Console.WriteLine(“{0}“,(float)(a

+

b)

/

2

+

(int)x

%

(int)y);

}

}

}

2.设计一个控制台程序Proj3-9,定义变量int

a=3,b=4,c=5;

并求表达式(++c-1)

using

System.Collections.Generic;

using

System.Text;

namespace

Proj3_9

{

class

Program

{

static

void

Main(string[]

args)

{

int

a

=

3,b

=

4,c

=

5;

Console.WriteLine(“{0}“,(++c

-

1)

}

}

}

3.设计一个控制台程序Proj3-10,声明一个学生结构类型Stud,包含学号、姓名和出生日期成员,定义Stud结构的两个学生变量s1和s2并赋值,求他们出生在星期几和他们出生相差的天数。【要求写出代码,并将运行结果截图】

using

System;

using

System.Collections.Generic;

using

System.Text;

namespace

Proj3_10

{

enum

WeekDayhz

{星期日,星期一,星期二,星期三,星期四,星期五,星期六};

class

Program

{

struct

Stud//结构类型声明应放在Main函数的外面

{

public

int

xh;//学号

public

string

xm;//姓名

public

DateTime

birthday;//出生日期

}

static

void

Main(string[]

args)

{

Stud

s1,s2;

s1.xh

=

100;

s1.xm

=

“李明“;

s1.birthday

=

new

DateTime(1985,10,18);

s2.xh

=

200;

s2.xm

=

“王丽“;

s2.birthday

=

new

DateTime(1986,2,16);

int

i

=

(int)s1.birthday.DayOfWeek;

Console.WriteLine(“{0}出生在{1}“,s1.xm,(WeekDayhz)i);

i

=

(int)s2.birthday.DayOfWeek;

Console.WriteLine(“{0}出生在{1}“,s2.xm,(WeekDayhz)i);

Console.WriteLine(“{0}和{1}相差{2}天“,s1.xm,s2.xm,s2.birthday

-

s1.birthday);

}

}

}

4.验证课本P56页的例3.7。【要求写出代码,并将运行结果截图】

using

System;

namespace

Proj3_7

{

class

Program

{

static

void

Main(string[]

args)

{

DateTime

d1

=

DateTime.Now;

//定义当前日期时间变量

DateTime

d2

=

new

DateTime(2009,10,1);

//定义一个日期时间变量

Console.WriteLine(“d1:{0}“,d1);

int

i

=

d1.Year;

int

j

=

d1.Month;

int

k

=

d1.Day;

int

h

=

d1.Hour;

int

m

=

d1.Minute;

int

s

=

d1.Second;

Console.WriteLine(“d1:{0}年{1}月{2}日{3}时{4}分{5}秒“,i,j,k,h,m,s);

Console.WriteLine(“d2:{0}“,d2);

Console.WriteLine(“相距时间:{0}“,d2

-

d1);

DateTime

d3

=

d1.AddDays(100);

//d3为d1的100天后的日期

Console.WriteLine(“d3:{0}“,d3);

Console.WriteLine(DateTime.IsLeapYear(i));

Console.WriteLine(DateTime.IsLeapYear(d2.Year));

}

}

}

实验3

使用数组

院(系):信息科学与技术学院课程名称:网络程序设计教师签名:

班级

信B1211、12

学号

实验室

专业

姓名

计算机号

实验名称

所用软件

实验成绩

3.1

实验目的

1.掌握C#中数组的声明和使用方法。

2.掌握C#中集合的声明和使用方法。

3.掌握Array类、ArrayList类使用方法。

3.2

实验预习

1.了解数组的定义。

2.了解数组的初始化。

3.了解Array类的属性和方法。

4.了解ArrayList类的属性和方法。

3.3

实验任务

1.验证课本P77例5.1。【将运行结果截图】

2.验证课本P79例5.2。【将运行结果截图】

3.验证课本P79例5.3。【将运行结果截图】

4.验证课本P85例5.4。【将运行结果截图】

5.编写一个控制台程序项目Proj5-6,假设10个整数用一个一维数组存放,求其最大值和最小值。【要求写出代码,并将运行结果截图】

using

System;

using

System.Collections.Generic;

using

System.Text;

namespace

Proj5_6

{

class

Program

{

static

void

Main(string[]

args)

{

int[]

a

=

new

int[10]{1,8,3,4,7,9,6,10,2,5};

int

n=10,max1,max2,i;

max1=a[0]>a[1]?a[0]:a[1];

max2=a[0]>a[1]?a[1]:a[0];

for

(i=2;i=

0)

{

listBox1.Items.Add(listBox2.SelectedItem);

listBox2.Items.RemoveAt(listBox2.SelectedIndex);

}

enbutton();

}

private

void

button4_Click(object

sender,EventArgs

e)

{

foreach

(object

item

in

listBox2.Items)

listBox1.Items.Add(item);

listBox2.Items.Clear();

enbutton();

}

}

}

9.创建一个Windows窗体项目Proj8-4,向其中添加一个窗体Form1,实现用户登录(输入用户名和口令,假设正确的用户/口令是1234/1234),并给出相应的提示信息。规定用户错误输入的次数不超过3次。

10.在Proj8-4项目中添加一个窗体Form2,设计该窗体内容,运行界面如下图。

实验7

用户界面设计(一)

院(系):信息科学与技术学院课程名称:网络程序设计教师签名:

班级

信B1211、12

学号

实验室

专业

姓名

计算机号

实验名称

所用软件

实验成绩

7.1

实验目的

1.掌握C#菜单的基本结构和组成。

2.掌握C#下拉式菜单和弹出式菜单的设计方法。

3.掌握通用对话框的使用。

7.2

实验预习

1.了解菜单的基本结构。

2.了解菜单的运行机制。

7.3

实验任务

1.验证课本P207例9.1,掌握下拉式菜单的使用。【要求写出核心代码,并将运行结果截图】

private

void

addop_Click(object

sender,EventArgs

e)

{

int

n;

n

=

Convert.ToInt16(textBox1.Text)

+

Convert.ToInt16(textBox2.Text);

textBox3.Text

=

n.ToString();

}

private

void

subop_Click(object

sender,EventArgs

e)

{

int

n;

n

=

Convert.ToInt16(textBox1.Text)

Convert.ToInt16(textBox2.Text);

textBox3.Text

=

n.ToString();

}

private

void

mulop_Click(object

sender,EventArgs

e)

{

int

n;

n

=

Convert.ToInt16(textBox1.Text)

Convert.ToInt16(textBox2.Text);

textBox3.Text

=

n.ToString();

}

private

void

divop_Click(object

sender,EventArgs

e)

{

int

n;

n

=

Convert.ToInt16(textBox1.Text)

/

Convert.ToInt16(textBox2.Text);

textBox3.Text

=

n.ToString();

}

private

void

op_Click(object

sender,EventArgs

e)

{

if

(textBox2.Text==““||

Convert.ToInt16(textBox2.Text)

==

0)

divop.Enabled

=

false;

else

divop.Enabled

=

true;

}

2.验证课本P209例9.2,掌握弹出式菜单的使用。【要求将运行结果截图】

3.验证课本P214例9.3,掌握通用对话框的使用。【要求写出核心代码,并将运行结果截图】

4.验证课本P224例9.4,掌握TreeView的使用。【将运行结果截图】

5.验证课本P231例9.5,掌握单选按钮的使用。【将运行结果截图】

实验8

用户界面设计(二)

院(系):信息科学与技术学院课程名称:网络程序设计教师签名:

班级

信B1211、12

学号

实验室

专业

姓名

计算机号

实验名称

所用软件

实验成绩

8.1

实验目的

1.掌握C#菜单的基本结构和组成。

2.掌握C#下拉式菜单和弹出式菜单的设计方法。

3.掌握通用对话框的使用。

8.2

实验预习

1.了解菜单的基本结构。

2.了解菜单的运行机制。

8.3

实验任务

1.创建一个Windows窗体应用程序项目Proj9-2,添加一个窗体Form1,其中有一个下拉式菜单,包含菜单项如下:

字体(menu1)

…宋体(menu11)

…仿宋(menu12)

…-

…黑体(menu13)

…幼园(menu14)

…楷体(menu15)

大小(menu2)

…28(menu21)

…20(menu22)

…-

…16(menu23)

…12(menu24)

…8(menu25)

当用户单击菜单项时,改变窗体中一个标签的字体和大小。

2.在项目Proj9-2基础上,实现课本P237的上机实验9的内容。

篇3:Java程序设计实验报告2(弹球游戏)1

Java程序设计实验报告2(弹球游戏)1 本文关键词:弹球,程序设计,实验,报告,游戏

Java程序设计实验报告2(弹球游戏)1 本文简介:《Java语言程序设计》课程设计实习报告题目:班级:学号:姓名:同组人员:指导老师:张彬一、实验目的1、掌握Swing图形用户界面编程以及事件处理等,掌握java绘图技术。2、掌握多线程编程的基本原理,能使用Runnable、ExecutorService等接口进行线程的创建、启动等工作。3、培养独

Java程序设计实验报告2(弹球游戏)1 本文内容:

《Java语言程序设计》课程设计

实习报告

题目:

班级:

学号:

姓名:

同组人员:

指导老师:张彬

一、实验目的

1、

掌握Swing图形用户界面编程以及事件处理等,掌握java绘图技术。

2、

掌握多线程编程的基本原理,能使用Runnable、ExecutorService等接口进行线程的创建、启动等工作。

3、

培养独立查找资料,并解决问题的能力。

二、实验任务

1、

设计并编程实现弹球游戏:

用户能通过GUI组件指定生成小球的数量,每个小球将从随机的位置出现,并具有随机颜色,随机速度以及随机的运动方向,小球沿初始方向匀速运动,当碰到窗口边缘时,小球将依据受力原理改变运动方向(可简化考虑,受力只改变小球的运动方向,小球仍按照初始速度匀速运动,且不考虑小球之间的碰撞)。

鼠标在界面中显示为方块状,玩家需按住鼠标来回移动以避开运动的小球及屏幕四周,如果鼠标碰到任一小球或者窗口四周,则游戏结束。

程序需提供计时功能,并最终显示玩家能坚持多少秒。

2、

程序要求:

(1)

具备相应界面,并通过事件编程,实现相应的GUI组件功能。

(2)

使用多线程技术,在程序窗口区域绘制小球,并以线程控制小球的移动,实现动画效果。

(3)

实现鼠标与屏幕四周,以及与小球的碰撞检测。

三、开发工具与平台

1.开发工具:Eclipse默认是一个和Jbuilder类似的Java开发工具,但它不仅仅只

是Java开发工具,只要装上相应的插件,eclipse也可作为其它语言的开发工具。如C/C++插件(CDT)。

2.开发平台:JDK1.5

四、设计思路

1.界面设计

(1)制作一个简单的面板JFrame,文件保存为bollFrame.java

其中为一public的类

bollFrame,其构造方法为:

bollFrame(int

n){

super();

setTitle(“我的弹球小游戏“);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Dimension

dimension

=

Toolkit.getDefaultToolkit().getScreenSize();//得到

电脑屏幕大小

setSize(450,450);

setLocation((dimension.width-game.getWidth())/2-250,(dimension.height-game.getHeight())/2-250);//设置面板显示基中;

this.n

=

n;

myBollPanel

=

new

bollPanel(n);//构造一个画板;

add(myBollPanel);//将画板放入JFrame

createMenu();//创建菜单;

setJMenuBar(bar);

}

(2)构造画板类,文件保存为bollPanel.java

其构造函数如下:

bollPanel(int

n){

this.n

=

n;

//

executorThread

=

Executors.newCachedThreadPool();//创建线程池;

mouse

=

new

mouseThread(mxNow,myNow,groupThread,this);//启动鼠标线程;

this.setIsOver(false);//游戏开始线程条件的判断;

for(int

i

=0

;i

myBollThread

=new

bollThread(this);

groupThread.add(myBollThread);

//executorThread.execute(myBollThread);//小球线程加入线程池;

}

addMouseListener(this);

addMouseMotionListener(this);

}

Paint()方法如下构造:

public

void

paint(Graphics

g){

if(!this.getIsOver())

//如果游戏还没结束;

{

super.paint(g);//清除原先的图像

g.setColor(Color.RED);

g.setFont(new

Font(“宋体“,Font.BOLD+Font.ITALIC,15));

g.drawString(“你已坚持:“+getT()+“S“,15,15);//计时器的显示;

for(int

i

=

0;i(getWidth()-23)||xNow(getHeight()-23)||yNow<0){//碰到上下边界;

groupThread.get(i).dy

=

-groupThread.get(i).dy;

}

groupThread.get(i).setxNow(xNow+groupThread.get(i).getdx());//

设置下一个位置;

groupThread.get(i).setyNow(yNow+groupThread.get(i).getdy());

}

}

if(isMouse){

g.drawImage(new

ImageIcon(“boll.gif“).getImage(),mxNow,myNow,40,40,this);//鼠标的图像;

}

}//end

paint();

总体界面如下:

2.逻辑设计

(1).首先,我们考虑到多个小球的运动,实质上是多线程的使用,n个小球我们就同时启动n个线程去控制每个小球的运动。因此我构造出一个类作为一个小球的线程,保存文件为bollThread.java,顾名思义,小球线程类。相关构造方法如下:

public

bollThread(bollPanel

my){

this.myPanel

=

my;

xStart

=

data.nextInt(200);//随机产生开始位置;

yStart

=

data.nextInt(200);

setxNow(xStart);////设置现在的位置;

setyNow(yStart);

setdx();//设置随机方向使用;注意:若不设置为随机,则所有小球将相同一个方向运动;

setdy();

}

(2)再次,小球的出现需要有载体,这就是画板,前面界面设置中已提到过,通过让多个小球共享一个画板,以及通过线程控制小球的重绘,最后通过画板显示给用户。

(3)在第(2)点中提到的画板上我们需要实现鼠标的监听,以下给出几个重要的鼠标事件监听:

public

void

mousePressed(MouseEvent

e)

{//单击启动鼠标事件;

if(e.getButton()==MouseEvent.BUTTON1){

copy.schedule(new

task(),0,1000);//启动定时器;

for(int

i

=0

;i(this.getWidth()-30)||mxNow(this.getHeight()-30)||myNow<=0){//鼠标是否碰到边界;

//

executorThread.shutdown();

this.setIsOver(true);

copy.cancel();

JOptionPane.showMessageDialog(null,“你撞墙了,下次小心点。。。游戏结束“,“提示“,JOptionPane.OK_OPTION);

this.removeMouseListener(this);

this.removeMouseMotionListener(this);

}

for(int

i

=0

;i

int

xNow

=groupThread.get(i).getxNow();

int

yNow

=

groupThread.get(i).getyNow();

if(isPeng(xNow,yNow,mxNow,myNow)){

//

executorThread.shutdown();

this.setIsOver(true);

copy.cancel();

JOptionPane.showMessageDialog(null,“if(你撞球了){“+“/n“+“挑战失败,游戏结束.}“,“提示“,JOptionPane.OK_OPTION);

//System.exit(0);

this.removeMouseListener(this);

this.removeMouseMotionListener(this);

}

//鼠标的上下左右边和

球碰撞的情况,

}

}

(4)

如果游戏开始后我们突然松开鼠标,让我们控制的小球(或“眼睛“)停留在最后松开的点上,那么小球碰到它还会判断是否相撞吗?答案是可以的,我们可以通过编写一个鼠标线程类来实现,保存文件为mouseThread.java;让此线程在我们按下鼠标开始游戏时同时启动,在我们松开鼠标时启动判断相撞事件。

相关的构造方法如下:

mouseThread(int

mxNow,int

myNow,Listgroup,bollPanel

bollpane){

this.mxNow

=

mxNow;//传入鼠标现在位置;

this.myNow

=

myNow;

this.groupThread

=

group;//传入小球线程组;

this.bollpane

=

bollpane;//传入画板对象;

}

3.

程序测试

在程序测试中,先后测试出了,以下几个注意点:

A.

在判断小球与鼠标控制的小球(“眼睛”)相撞时,条件中用到两点之间的距离问题,发现条件不能是两点距离刚好等于两相撞物体半径和,此条件太苛刻,可能引起判断的失误(概率蛮高的呵呵),而应该是小于半径和。

B.

.在小球碰撞或控制的小球(”眼睛“)碰到边界游戏结束时,已经停止了线程,小球竟然还能动,而且是缓慢移动,但是判断是否碰撞及边界问题都能正常执行,与我所意料的完全相反,到现在也不知道是怎么回事,只能在paint()

里进行条件判断,只让bollPanel留下最后一次的个小球及“眼睛”位置。

C.这是最后才调试出来的,也是这个游戏中较难注意到的。

就是一些boolean变量的设置:

private

boolean

isTime;//定时器是否启动;

private

boolean

isGroupThread;//所有小球线程组是否启动;

private

boolean

isMouseThread;//鼠标线程是否启动;

private

boolean

isMouse;//鼠标事件是否启动;

private

boolean

isOver;//游戏是否结束;

刚开始时并没有注意到这些,如果我点击鼠标左键开始游戏时,启动了小球线程,这时要设置变量isGroupThread

=

true标志小球线程组已启动,释放鼠标启动鼠标线程时,isMouseThread

=

true让鼠标线程来控制与小球相撞的判断,定时器也在这时响应启动

isTime

=true开始计时,若不设置这些的话,将发生以下本质上的共同错误:

:等我释放鼠标后想再次控制小球,就必须在一次启动鼠标事件,这时将重新启动一次计时器,重新启动一次小球线程组,重新启动鼠标线程;这样的结果是导致游戏的结果不确定性,没碰到小球(实际上已碰撞)它就检测碰撞结束游戏。以及计时器的计时紊乱等。

具体调试后的相关代码实现见附录.。

五、实验总结

通过这次的程序设计,我更加明白了学以致用的道理,对线程的应用使得我更好更快的掌握了线程的本质,同时,在此次的程序设计中,经过不断地调试,是我明白了一个程序或项目要做到“精致”,是是需要花多大的精力和耐心,总之,学以致用,会将学到的知识应用到实际中才是学之根本。

此次实验也更了解到了线程的知识,比如:一个线程stop后,不能再用start启动,而应当重新实例化,在start()。也就是说线程的状态转换过程(新建-就绪-运行-阻塞-死忙)是不可逆的,这是个人理解,至少从本实验中可以得到验证。

最后,感谢老师的指导和同学们对我的帮助。

6、

附录

以下是调试后的相关算法实现:

A:

public

boolean

isPeng(int

xNow,int

yNow,int

mxNow,int

myNow){//利用两点之间的距离算法,判断是否撞球

int

x1

=

xNow+15,y1

=

yNow+15;

int

x2

=

mxNow+20,y2

=

myNow+20;

int

mulx

=

x1-x2,muly

=

y2

-y1;

double

sum

=

Math.pow(muly,2)+Math.pow(mulx,2);

if(sum

return

true;

else

return

false;

}

B:

public

void

paint(Graphics

g){

if(!this.getIsOver())

//在此判断游戏是否结束;

{

super.paint(g);//清除原先的图像

g.setColor(Color.RED);

g.setFont(new

Font(“宋体“,Font.BOLD+Font.ITALIC,15));

g.drawString(“你已坚持:“+getT()+“S“,15,15);

for(int

i

=

0;i(getWidth()-23)||xNow(getHeight()-23)||yNow<0){//碰到上下边界;

groupThread.get(i).dy

=

-groupThread.get(i).dy;

}

groupThread.get(i).setxNow(xNow+groupThread.get(i).getdx());

groupThread.get(i).setyNow(yNow+groupThread.get(i).getdy());

}

}

if(isMouse){

g.drawImage(new

ImageIcon(“boll.gif“).getImage(),mxNow,myNow,40,40,this);

}

}//end

paint();

C

:

(1)public

void

mousePressed(MouseEvent

e)

{//单击启动鼠标事件;

if(e.getButton()==MouseEvent.BUTTON1){

if(isMouseThread){//鼠标线程是否活着;

mouse.stop();

isMouseThread

=

false;

}

if(!isTime){

copy.schedule(new

task(),0,1000);//启动定时器;

isTime

=

true;

}

if(!isGroupThread){

for(int

i

=0

;i(this.getWidth()-30)||mxNow(this.getHeight()-30)||myNow<=0){//鼠标是否碰到边界;

//

executorThread.shutdown();

this.setIsOver(true);

copy.cancel();

JOptionPane.showMessageDialog(null,“你撞墙了,下次小心点。。。游戏结束“,“提示“,JOptionPane.OK_OPTION);

this.removeMouseListener(this);

this.removeMouseMotionListener(this);

}

for(int

i

=0

;i

int

xNow

=groupThread.get(i).getxNow();

int

yNow

=

groupThread.get(i).getyNow();

if(isPeng(xNow,yNow,mxNow,myNow)){

//

executorThread.shutdown();

this.setIsOver(true);

copy.cancel();

JOptionPane.showMessageDialog(null,“if(你撞球了){“+“/n“+“挑战失败,游戏结束.}“,“提示“,JOptionPane.OK_OPTION);

//System.exit(0);

this.removeMouseListener(this);

this.removeMouseMotionListener(this);

}

//鼠标的上下左右边和

球碰撞的情况,

}

}

    以上《程序设计实验报告4》范文由一流范文网精心整理,如果您觉得有用,请收藏及关注我们,或向其它人分享我们。转载请注明出处 »一流范文网»最新范文»程序设计实验报告4
‖大家正在看...
设为首页 - 加入收藏 - 关于范文吧 - 返回顶部 - 手机版
Copyright © 一流范文网 如对《程序设计实验报告4》有疑问请及时反馈。All Rights Reserved