import javax.swing.*;
import sun.audio.AudioPlayer;
import sun.audio.AudioStream;
import java.applet.Applet;
import java.applet.AudioClip;
import java.awt.*;
import java.awt.event.*;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
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<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<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<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) {
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<j){ //第一按钮同行空按钮在与第二按钮之间
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<i) {
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)
start(); //----------------------------点击重列会播放声音
reload();
for(int cols = 0;cols < 6;cols++){
for(int rows = 0;rows < 5;rows++ ){
if(e.getSource()==diamondsButton[cols][rows])
start(); //----------------单
estimateEven(cols+1,rows+1,diamondsButton[cols][rows]);
}
}
}
BufferedInputStream buf =null;
public void start() //这是通过流读取声音文件
{
FileInputStream fileau;
AudioStream as;
try {
fileau = new FileInputStream("D:/cb1-994.au");
as=new AudioStream(fileau);
AudioPlayer.player.start(as);
} catch (Exception e) {
e.printStackTrace();
}finally{
}
}
public void close() throws Exception{
buf.close();
}
public static void main(String[] args) {
lianliankan llk = new lianliankan();
//llk.start();
llk.randomBuild();
llk.init();
}
}
//old 998 lines
//new 318 lines
分享到:
相关推荐
标题中的“pb做得模拟连连看游戏+ 源码”指的是使用PowerBuilder(PB)开发的一款模拟连连看的游戏,这是一款基于图形用户界面(GUI)的桌面应用程序。PowerBuilder是Sybase公司(现为SAP的一部分)推出的一种可视化...
微信小游戏源码 奇葩连连看游戏源码(仅用于学习参考)微信小游戏源码 奇葩连连看游戏源码(仅用于学习参考)微信小游戏源码 奇葩连连看游戏源码(仅用于学习参考)微信小游戏源码 奇葩连连看游戏源码(仅用于学习...
【JAVA版连连看(单机版)源码】是一个适合初学者和爱好者研究的项目,它提供了游戏开发的基础框架和实现细节。这个源码能够直接运行,为学习JAVA编程和游戏开发提供了很好的实践素材。下面将详细介绍这个项目涉及的...
HGE提供了一系列游戏开发所需的工具和库,包括声音管理、资源加载、物理模拟等。使用HGE可以简化游戏的底层代码,让开发者更专注于游戏逻辑和交互设计。 “VC”(Visual C++)是微软的集成开发环境,用于编写C++...
【QQ连连看单机版】是一款深受用户喜爱的小游戏,其设计灵感来源于经典的网络版QQ连连看。这款游戏的特色在于,它提供了与在线版本相同的玩法和体验,但无需互联网连接,玩家可以在自己的电脑上随时随地享受连连看的...
甘蔗连连看是甘蔗小游戏推出的一款连连看单机小游戏,这是非常风靡的办公室小游戏,甘蔗连连看游戏具有下面的特点: 1、由低到高的难度,让你循序渐进的成为连连看高手; 2、可以保存游戏进度,每日只需轻松的玩上一...
在本项目中,我们讨论的是一个使用Java编程语言实现的单机版连连看游戏。这个项目对于初学者来说是一个很好的学习资源,因为它展示了如何利用Java进行图形用户界面(GUI)开发,以及如何组织和编写清晰、规范的代码...
通过深入研究这个单机版QQ连连看的源码,你可以对游戏开发有更直观的理解,掌握基本的游戏编程技巧,并且为后续更复杂的游戏项目打下基础。同时,这也是一个实践面向对象编程、事件驱动编程和算法设计的好机会。对于...
可能包含的部分有:游戏界面的设计、数据结构的选择、算法的实现、错误处理机制、性能优化等方面。附件.txt可能是开发者记录的开发日志或者代码注释,对于理解代码功能和结构有所帮助。 最后,connect文件可能是...
### 连连看游戏C语言代码解析 #### 一、简介 连连看是一款经典的消除类游戏,玩家通过连接相同的两张牌来实现消除的目的。本文将详细介绍一个基于C语言的简易连连看游戏源码,帮助读者理解游戏逻辑及编程实现。 ##...
在WPF中,可以利用PathGeometry和DrawingContext来绘制复杂的形状,配合动画,模拟烟花绽放的效果,提升游戏体验。 4. **事件处理**:WPF的事件模型使得开发者可以方便地响应用户操作,比如点击、拖动等。在这个...
html5微信小游戏源码 奇葩连连看游戏源码(仅用于参考)html5微信小游戏源码 奇葩连连看游戏源码(仅用于参考)html5微信小游戏源码 奇葩连连看游戏源码(仅用于参考)html5微信小游戏源码 奇葩连连看游戏源码(仅...
java小游戏 (源码+视频+文档+ppt) swing连连看游戏java小游戏 (源码+视频+文档+ppt) swing连连看游戏java小游戏 (源码+视频+文档+ppt) swing连连看游戏java小游戏 (源码+视频+文档+ppt) swing连连看游戏java小游戏 ...
《cocos creator连连看游戏》是一款使用Cocos Creator框架结合JavaScript语言开发的休闲益智类游戏,主要目标是通过连接相同图案的方块,直至消除所有方块来完成关卡。这款游戏适合初级开发者进行学习和实践,因为它...
**Python连连看小游戏源代码详解** 在编程领域,制作小游戏是一种常见的学习和实践方式,而“连连看”作为一款广受欢迎的休闲游戏,其Python实现更是吸引了许多初级和中级开发者。这个项目是基于Python语言构建的,...
这个源码提供了一个完整的连连看游戏实现,对于学习HTML5游戏开发或者想要定制自己的连连看游戏的开发者来说非常有价值。 首先,HTML5游戏的核心在于HTML、CSS和JavaScript的结合。在这个连连看游戏中,HTML用于...
Java 连连看游戏代码是基于Java编程语言开发的一款经典休闲益智游戏。连连看游戏的基本规则是将两个相同的图案通过最少的直线连接起来消除,直到所有图案都被消除为止。在Java中实现这款游戏,需要涉及多方面的编程...
7. **状态管理**:连连看游戏有多个状态,如开始、进行中、游戏结束等。开发者需要使用状态机模型来管理这些状态,并确保状态转换的正确性。 8. **错误处理**:为了提供良好的用户体验,游戏需要能够处理异常情况,...
C#版连连看游戏源码是一个适合初学者深入学习编程技术的项目,它结合了C#语言、图形用户界面设计以及基本的游戏逻辑实现。通过分析和理解这个源码,你可以获得以下几个重要的知识点: 1. **C#语言基础**:C#是微软...