连连看源代码
发布时间:2011-12-28 20:08:41
发布时间:2011-12-28 20:08:41
摘要:
近年来,Java作为一种新的编程语言,以其简单性、可移植性和平台无关性等优点,得到了广泛地应用,特别是Java与万维网的完美结合,使其成为网络编程和嵌入式编程领域的首选编程语言。
Java语言的学习热潮并没有因为时间的推移而消退,相反,由于计算机技术的发展所带来的新应用的出现,Java越来越流行,这种情况是以往程序设计语言在其生存周期内所不多见的。Java语言之所以这样长盛不衰,一是因为其众多的技术特点与现今的应用十分合拍,可以覆盖大部分的需求;二是因为SUN公司不断推出新的版本,完善Java自身的功能。有了这两点,Java语言成为程序员首选的程序设计开发工具就在情理之中了.
连连看来源于街机游戏《四川麻将》和《中国龙》,是给一堆图案中的相同图案进行配对的简单游戏,在2003年,一个叫做朱俊的网友将这种形式搬到了PC上,立刻成为办公一族的新宠,并迅速传遍了世界各地。饱受工作压力的人们没有太多的时间进行复杂的游戏,而对于这种动动鼠标就能过关的游戏情有独钟。之后村子的连连看风靡版,阿达的连连看奥运版,连连看反恐版,还有敏敏连连看,水晶连连看等遍地开花,造就了一个连连看的新世界。连连看游戏有多种地图样式和道具系统、大大加强了游戏的可玩性,是一款老少皆宜的休闲佳品。
关键字:发展,java,连连看,程序设计;
1. 课程设计介绍
课题设计的目的:
1) 进一步加深对Java语言的理解和掌握;将所学的JAVA知识运用于实践中。
2) 课程设计将理论与实践相结合,提供了一个既动手又动脑,独立实践的机会,锻炼我们的分析解决;实际问题的能力,提高学生适应实际,实践编程的能力 。
3)熟练掌握JAVA语言中图形用户界面程序的编写;
4)大体了解怎样用JAVA来编写小游戏的,增强我们实践能力和创新精神的综合培养。
课程设计的要求:
由于Java语言是当今流行的网络编程语言,它具有面向对象、跨平台、分布应用等
特点。面向对象的开发方法是当今世界最流行的开发方法,它不仅具有更贴近自然的语义,
而且有利于软件的维护和继承学会java程序开发的环境搭建与配置,并在实际运用中学习和掌
握Java程序开发的全过程。进一步熟悉掌握Java程序设计语言的基础内容,如用户图形界面
设计、Java多线程编程、Applet程序的设计、文件和网络输入输出流编程、Java数据库编程等。
通过亲自动手写程序,一方面拓展知识面,一方面锻炼调试能力。
第一章 系统设计
1.1 需求分析
该系统通过运用java的相关知识GUI来做界面设计,将Netbean作为辅助软件,进一步完善系统程序。是图形化的游戏连连看界面更加美观,不至于过于单调乏味,无形中增加了游戏的观赏性,使这款小游戏给用户带来的舒适度大增。
1.2 总体设计
1.3 功能设计
每次用户选择两个数字块,如果数字块满足一定条件(两个数字块的数字一样,且这两个数字块之间存在转弯少于3的路径),则两个数字块都能消掉。给定任意具有相同数字的两个数字块,我们需要寻找这两个块之间在转弯最少的情况下,经过数字数目最少的路径。如果这个最优路径的转弯数目少于3 ,则这两个数字块可以消去。通过本游戏的开发,达到学习Java技术和熟悉软件开发流程的目的。
这个游戏是用图形界面实现的,通过编译解释后,出现一个图开界面。界面是由若干个小方格组成的,每一个小方格里有一个数值,如果在一个边上有相同的数值,连续点击它们就会消失,同时界面上正上方的分数就会自动加分。游戏还设有退出、重列、再来一局的功能,方便游戏操作。
第二章 系统各功能模块设计
该系统分为三个模块:
1、再来一局
游戏通过找寻数字相同的数据块来取得分数每次玩完一局时点击再来一局,游戏就会将每一局的得分累加在一起得到最终分数。
2、重列
游戏玩到一定程度时可能找不到数字相同的数字块,因此需要重新排列数据块,这是该游戏的复杂度减小,最终达到娱乐的目的。
3、退出
点击此按钮退出游戏。
第三章 界面设计
该游戏采用GUI来设计界面,程序设计了窗体,在窗体上添加面板,面板上添加按钮,可避勉后一按钮覆盖前一按钮的情况发生。
下面是该游戏的一些相关图:
3-1 游戏开始
3-2 游戏进行中图示
3-3 继续下一局 第四章 课程设计总结和体会
通过这次课程设计还使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,并且还发现了自己的许多不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。但通过这次课程设计之后,一定把以前所学过的知识重新温故。
我完成了这次JAVA课程设计,不过这只是我学习路上的驿站。我相信我在未来的学习中会记住从本次课程设计中所学到的东西,并将它用到未来的学习中去。在这里谢谢老师的指导,我会更加努力的学习java。
第五章 致谢
经过为期一周的java课程设计,我学会了很多关于java的相关知识,巩固了所学的知识,同时加深了对这门课的认识,尤其是在刘老师的帮助下取得了很大的进步。所以在此表示对老师深深地谢意!
参考文献:
[1] 刘光明.企业文化与核心竞争力[J] .经济管理, 2002, (17).
[2] Cochran J K,Qual B K P.A Microcomputer System for Qualitativfe Simulation[J]. Simulation,1990,58(11)
[3] 张刚.企业组织创新研究[M] .北京:科学出版社,2000
[4] 张庆生.地质力学系统理论[D] .武汉:中国地质大学,2001.
[5] 刘宪恩.形成学校文化的基本源点[N] .光明日报,2002-3-12(B1).
附录:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class lianliankan implements ActionListener
{ JFrame mainFrame; //主面板
Container thisContainer;
JPanel centerPanel,southPanel,northPanel; //子面板
JButton diamondsButton[][] = new JButton[6][5];//游戏按钮数组
JButton exitButton,resetButton,newlyButton; //退出,重列,重新开始按钮
JLabel fractionLable=new JLabel("0"); //分数标签
JButton firstButton,secondButton; //分别记录两次被选中的按钮
int grid[][] = new int[8][7];//储存游戏按钮位置
static boolean pressInformation=false; //判断是否有按钮被选中
int x0=0,y0=0,x=0,y=0,fristMsg=0,secondMsg=0,validateLV; //游戏按钮的位置坐标
int i,j,k,n;//消除方法控制
public void init(){
mainFrame=new JFrame("JKJ连连看");
thisContainer = mainFrame.getContentPane();
thisContainer.setLayout(new BorderLayout());
centerPanel=new JPanel();
southPanel=new JPanel();
northPanel=new JPanel();
thisContainer.add(centerPanel,"Center");
thisContainer.add(southPanel,"South");
thisContainer.add(northPanel,"North");
centerPanel.setLayout(new GridLayout(6,5));
for(int cols = 0;cols < 6;cols++){
for(int rows = 0;rows < 5;rows++ ){
diamondsButton[cols][rows]=new JButton(String.valueOf(grid[cols+1][rows+1]));
diamondsButton[cols][rows].addActionListener(this);
centerPanel.add(diamondsButton[cols][rows]); } }
exitButton=new JButton("退出");
exitButton.addActionListener(this);
resetButton=new JButton("重列");
resetButton.addActionListener(this);
newlyButton=new JButton("再来一局");
newlyButton.addActionListener(this);
southPanel.add(exitButton);
southPanel.add(resetButton);
southPanel.add(newlyButton);
fractionLable.setText(String.valueOf(Integer.parseInt(fractionLable.getText())));
northPanel.add(fractionLable);
mainFrame.setBounds(280,100,500,450);
mainFrame.setVisible(true); }
public void randomBuild() {
int randoms,cols,rows;
for(int twins=1;twins<=15;twins++) {
randoms=(int)(Math.random()*25+1);
for(int alike=1;alike<=2;alike++) {
cols=(int)(Math.random()*6+1);
rows=(int)(Math.random()*5+1);
while(grid[cols][rows]!=0) {
cols=(int)(Math.random()*6+1);
rows=(int)(Math.random()*5+1); }
this.grid[cols][rows]=randoms; } } }
public void fraction(){
fractionLable.setText(String.valueOf(Integer.parseInt(fractionLable.getText())+100)); }
public void reload() {
int save[] = new int[30];
int n=0,cols,rows;
int grid[][]= new int[8][7];
for(int i=0;i<=6;i++) {
for(int j=0;j<=5;j++) {
if(this.grid[i][j]!=0) {
save[n]=this.grid[i][j];
n++; } } }
n=n-1;
this.grid=grid;
while(n>=0) {
cols=(int)(Math.random()*6+1);
rows=(int)(Math.random()*5+1);
while(grid[cols][rows]!=0) {
cols=(int)(Math.random()*6+1);
rows=(int)(Math.random()*5+1); }
this.grid[cols][rows]=save[n];
n--; }
mainFrame.setVisible(false);
pressInformation=false; //这里一定要将按钮点击信息归为初始
init();
for(int i = 0;i < 6;i++){
for(int j = 0;j < 5;j++ ){
if(grid[i+1][j+1]==0)
diamondsButton[i][j].setVisible(false); } } }
public void estimateEven(int placeX,int placeY,JButton bz) {
if(pressInformation==false) {
x=placeX; y=placeY;
secondMsg=grid[x][y];
secondButton=bz;
pressInformation=true; }
else { x0=x; y0=y;
fristMsg=secondMsg;
firstButton=secondButton;
x=placeX; y=placeY;
secondMsg=grid[x][y];
secondButton=bz;
if(fristMsg==secondMsg && secondButton!=firstButton){
xiao(); } } }
public void xiao() { //相同的情况下能不能消去。仔细分析,不一条条注释
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
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
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<8;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) {
rowPassOne(); } }
if (x
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
for (n=y0;n<=y-1 ;n++ ) {
if (grid[i][n]!=0) {
k=0;
break; }
if(grid[i][n]==0 && n==y-1) {
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) {
remove(); } } } } } } }
public void linePassOne(){
if (y0>j){ //第一按钮同行空按钮在左边
for (i=y0-1;i>=j ;i-- ){ //判断第一按钮同左侧空按钮之间有没按钮
if (grid[x0][i]!=0) {
k=0;
break; }
else { k=2; } //K=2说明通过了第二次验证 } }
if (y0
for (i=y0+1;i<=j ;i++){
if (grid[x0][i]!=0) {
k=0;
break; }
else{ k=2; } } } }
public void rowPassOne(){
if (x0>i) {
for (j=x0-1;j>=i ;j-- ) {
if (grid[j][y0]!=0) {
k=0;
break; }
else { k=2; } } }
if (x0
for (j=x0+1;j<=i ;j++ ) {
if (grid[j][y0]!=0) {
k=0;
break; }
else { k=2; } } } }
public void remove(){
firstButton.setVisible(false);
secondButton.setVisible(false);
fraction();
pressInformation=false;
k=0;
grid[x0][y0]=0;
grid[x][y]=0; }
public void actionPerformed(ActionEvent e) {
if(e.getSource()==newlyButton){
int grid[][] = new int[8][7];
this.grid = grid;
randomBuild();
mainFrame.setVisible(false);
pressInformation=false;
init(); }
if(e.getSource()==exitButton)
System.exit(0);
if(e.getSource()==resetButton)
reload();
for(int cols = 0;cols < 6;cols++){
for(int rows = 0;rows < 5;rows++ ){
if(e.getSource()==diamondsButton[cols][rows])
estimateEven(cols+1,rows+1,diamondsButton[cols][rows]); } } }
public static void main(String[] args) {
lianliankan llk = new lianliankan();
llk.randomBuild();
llk.init(); } }