万年历和连连看1
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
明达职业技术学院
实训(实践)报告
2010-2011学年度第一学期
信息工程系计算机应用技术专业
班级 09计算机应用技术学号 41093105
课题名称Java课程设计
学生姓名刘红艳
指导教师徐山
2010年11月03日
专业班级09计算机姓名刘红艳学号05 指导老师徐山实训(实践)题目万年历和连连看
设计实训(实践)的主要内容:
一、万年历设计:
1、利用Java语言编写一个万年历表的程序
2、利用Frame设计出万年历表的外框架并且加上swing、awt控件
3、实现100年以内日期的查询
4、实现所查当天的星期几的查询
5、输出月份表
二、连连看设计:
1、利用JA V A完成界面的设计
2、完成3个子面板以及核心grid()数组设计
3、完成消除的算法(包括相邻、同一条直线、拐弯两线和三线设计)
4、完成重列的算法
5、完成分数的计算
要求完成的主要任务:
1、完成设计内容
2、设计出万年历的功能
3、完成连连看的算法设计
4、设计说明书,字数为2500字以上
作业提交方式:java设计程序原代码及其字节码文件
指导老师签名:
1、可行方案的筛选方法及设计思路
㈠万年历、在本次实训中的万年历是制作年份、月份和星期的查询,从外观上简洁、美观、大方、易懂。
本次实训中用到了图形界面中的awt组件,还用到类和多个方法以及事件监听器接口和事件监听器接口中的方法。
首先我用awt组件设置了界面窗口的大小、背景颜色、文件的大小等,使界面里的内容充满整个界面;在设置按钮中我添加了ActionListener监听接口;在布局中我使用的是流式布局;其次用到了直线绘图是界面不至于混乱看不懂。
㈡连连看、在本次实训的连连看有分数、退出、重来、再来一局等是界面内容简洁而易懂、一目了然。
本次实训中用到了图形界面中的awt组件和swing组件,还用到了布局管理中的南北布局、事件监听器和多个方法。
2、注意已学过的相关知识提要以及与本课题有关的新知识
3、进度安排
(一)、万年历的设计
①明确设计内容,完成相关资料素材的搜索;(4学时)
②完成Frame设计万年历表的外框架并且加上swing、awt控件;(4学时)
③实现100年以内日期的查询;(2学时)
④完成所查当天的星期几的查询;(3学时)
⑤输出每月的月份表,完成界面绘制;(4学时)
⑥完善代码文件,实现个性小功能;(3学时)
⑦完成实验说明书;(2学时)
(二)、连连看设计:
①、利用JA V A完成界面的设计(4学时)
②、完成3个子面板以及核心grid()数组设计(4学时)
③、完成消除的算法(包括相邻、同一条直线、拐弯两线和三线设计)(6学时)
④、完成重列的算法(4学时)
⑤、完成分数的计算(4学时)
⑥、完成设计报告(4学时)
4、设计说明书撰写时注意随时注意保留在设计过程中的思路、计算过程及文字草稿。
Java课程设计任务书(设计说明)
一、万年历
摘要
随着信息技术在电器软件开发的平台上应用越来越广泛,java以其特有的优势迅速发展。
Java是一种简单的、面向对象的、分布式的、解释的、安全的、可移植的、性能优异的多线程语言。
他以其强安全性、平台无关性、硬件结构无关性、语言简洁、面向对象的特点,在网络编程语言中占据了无可比拟的优势,成为实现电子商务系统的首选语言。
本此实训用到了awt组件中的Frame类、布局管理中的流式布局、事件处理中的ActionEvent事件类和绘图中的直线绘图drawLine,使用了getYear方法。
万年历功能的介绍
①、awt是抽象窗口工具的缩写,它为编写图形用户界面提供了用户接口,通过这个接
口就可以继承很多方法,省去很多工作。
在此界面中用到了四个文件、一个按钮和一个标签,并设置了窗口的名称、大小及颜色。
在此中用到了布局管理器中的FlowLayout 并设置了文件、按钮、标签的大小和颜色。
将按钮设置为监听。
源代码如下:
public static void main(String args[]){
fra.setTitle(" 万年历");
fra.setBounds(0,0,400,500);
fra.setBackground(Color.orange);
fra.setLayout(new FlowLayout());
txt1.setBounds(50,50,20,20);
txt1.setBounds(55,55,20,20);
txt2.setBounds(60,60,20,20);
txt1.setBounds(65,65,20,20);
Button b=new Button("查询");
b.setBounds(70,70,20,20);
b.setBackground(Color.PINK);
b.addActionListener(fra);
lb11=new Label("0000",Label.CENTER);
lb11.setBounds(80,800,130,25);
lb11.setForeground(Color.blue );
②、ActionListener监听接口是由ActionEvent事件的监听器对象实现的,并用到了刷
新。
原代码如下:
x=Integer.parseInt(txt1.getText());
y=Integer.parseInt(txt2.getText());
z=getYear(x,y);
lb11.setText(String.valueOf(days[z]));
repaint();
③、使用getYear()方法对所显示的月份进行星期几的判断。
原代码如下:
for(int k=0;k<j;k++){
if((i%4==0&&i%100!=0)||i%400==0)
{d[2]=29;}
v=v+d[k];
}
s=i-1+(i-1)/4-(i-1)/100+(i-1)/400+(v+1);
s=s%7;
return s;
}
④、Graphics类是绘图类他提供了很多绘图方法,可以绘制直线、圆、圆弧、任意曲线
等。
绘图所使用的坐标系与屏幕、窗口相同,在本实训中用到的是直线绘图drawLine()。
设置了直线的位置、颜色和字体大小和在直线内显示月份星期几。
源代码如下:
g.setColor(Color.red);
for(int i=100;i<400;i=i+40)
g.drawLine(15,i,390,i);
Font fnt=new Font("宋体",Font.ITALIC,15);
g.setFont(fnt);
int j=40;
for(int i=0;i<7;i++){
g.drawString(days[i],j,130);
j=j+50;}
⑤、在直线绘图中用到了if语句来判断所要显示月份的天数,使更容易看出几年几月
几日是星期几。
源代码如下:
if(month==2){
if(year%4==0&&year%100!=0||year%400==0)
{day=29;}
else
{day=28;}
}
else if((month==4)||(month==6)||(month==9)||(month==11)){ day=30;}
else
{day=31;}
二、连连看
摘要
本实训围绕java编程语言在网络编程方面的具体应用,论述了使用面向对象方法,对连连看程序进行需求分析、概要设计、详细设计,最后使用java编程实现的全过程。
在当今这个网络时代,java语言在网络编程方面的优势使得网络编程有了更好的选择。
Java 语言最大的特点是具有跨平台性,使其不受平台不同的影响,得到了广泛的应用。
连连看的功能介绍
⑴、连连看中也用到了图形界面awt组件同时也用到了swing组件。
在其中定义了三
个子页面。
一个标签、两个二维数组、和三个按钮等。
源代码如下:
JPanel panel1,panel2,panel3;//定义三个子面板
JLabel lb1=new JLabel("分数");
JButton but[][]=new JButton[4][4];
JButton exitbut=new JButton("退出");
JButton chong=new JButton("重列");
JButton zai=new JButton("再来一局");
int grid[][]=new int[6][7];
⑵、定义了一个南北布局,使子面板布局有条理。
源代码如下:
panel1=new JPanel();
c.add(panel1,"North");
panel2=new JPanel();
c.add(panel2,"Center");
panel3=new JPanel();
c.add(panel3,"South");
panel3.add(exitbut);
exitbut.addActionListener(this);
panel3.add(chong);
chong.addActionListener(this);
panel3.add(zai);
zai.addActionListener(this);
panel1.add(lb1);
panel2.setLayout(new GridLayout(4,4));//产生四行四列的按纽
randomBuild();
for(int p1=0;p1<4;p1++){
for(int j=0;j<4;j++){
but[p1][j]=new JButton(icons[grid[p1+1][j+1]]);//调用图片
panel2.add(but[p1][j]);
but[p1][j].addActionListener(this);
⑶、添加了外部图片以及随机出现图片。
源代码如下:
private static Icon []icons = new ImageIcon[16];
private static final String imgDir="image";
public void randomBuild(){
int randoms,cols,rows;
for(int t=1;t<=7;t++)
{
randoms=(int)(Math.random()*7);
for(int j=1;j<=2;j++)
{
cols=(int)(Math.random()*4+1);
rows=(int)(Math.random()*4+1);
while(grid[cols][rows]!=0)
{
cols=(int)(Math.random()*4+1);
rows=(int)(Math.random()*4+1);
}
this.grid[cols][rows]=randoms;
}
}
}
⑷、相邻图片的消除的方法。
源代码如下:
if((x0==x &&(y0==y+1||y0==y-1)) || ((x0==x+1||x0==x-1)&&(y0==y)))
{ //判断是否相邻
remove();
}
else
{
for (j=0;j<7;j++ )
{
if (grid[x0][j]==0)
{ //判断第一个按钮同行哪个按钮为空
if (y>j)
{ //如果第二个按钮的Y坐标大于空按钮的Y坐标说明第一按钮在第二按钮左边
for (i=y-1;i>=j;i-- )
{ //判断第二按钮左侧直到第一按钮中间有没有按钮
if (grid[x][i]!=0)
{ k=0;
break;
}
else{ k=1; } //K=1说明通过了第一次验证
}
if (k==1)
{
linePassOne();
}
}
if (y<j)
{ //如果第二个按钮的Y坐标小于空按钮的Y坐标说明第一按钮在第二按钮右边
for (i=y+1;i<=j ;i++ )
{ //判断第二按钮左侧直到第一按钮中间有没有按钮
if (grid[x][i]!=0)
{ k=0;
break;
}
else { k=1; }
}
if (k==1)
{ linePassOne(); }
}
if (y==j )
{ linePassOne(); }
}
if (k==2)
{
if (x0==x)
{ remove(); }
if (x0<x)
{
for (n=x0;n<=x-1;n++ )
{
if (grid[n][j]!=0)
{ k=0;
break;
}
if(grid[n][j]==0 && n==x-1)
{ remove(); }
}
}
if (x0>x)
{
for (n=x0;n>=x+1 ;n-- )
{
if (grid[n][j]!=0)
{ k=0;
break;
}
if(grid[n][j]==0 && n==x+1)
{ remove(); }
}
}
}
}
for (i=0;i<6;i++ )
{ //列
if (grid[i][y0]==0)
{
if (x>i)
{
for (j=x-1;j>=i ;j-- )
{
if (grid[j][y]!=0)
{ k=0;
break;
}
else { k=1; }
}
if (k==1)
}
if (x<i)
{
for (j=x+1;j<=i;j++ )
{
if (grid[j][y]!=0)
{ k=0;
break;
}
else { k=1; }
}
if (k==1)
{ rowPassOne();}
}
if (x==i)
{ rowPassOne(); }
}
if (k==2)
{
if (y0==y)
{ remove(); }
if (y0<y)
{
for (n=y0;n<=y-1 ;n++ )
{
if (grid[i][n]!=0)
{ k=0;
break;
}
if(grid[i][n]==0 && n==y-1)
}
}
if (y0>y)
{
for (n=y0;n>=y+1 ;n--)
{
if (grid[i][n]!=0)
{ k=0;
break;
}
if(grid[i][n]==0 && n==y+1)
{ remove(); }
}
参考文献
[1].孙全党王吴迪赵枫朝,Java程序设计应用教程,电子工业出版社,2006.2
[2]. 玉阳,Java从入门到精通,清华大学出版社,2006.8
[3]. 曾令明索望甘刚宋波,Java程序设计教程,西安电子科技大学出版社,2007.8。