當前位置:首頁 » 操作系統 » 小游戲連連看源碼

小游戲連連看源碼

發布時間: 2023-08-25 04:17:56

㈠ 如何用java 編寫一個連連看游戲全程設計

剛試了。。測試通過。。
importjavax.swing.*;
importjava.awt.*;
importjava.awt.event.*;

publicclass LianLianKan implements ActionListener {
JFrame mainFrame; // 主面板
Container thisContainer;
JPanel centerPanel, southPanel, northPanel; //子面板
JButton diamondsButton[][] = newJButton[6][5];// 游戲按鈕數組
JButton exitButton, resetButton, newlyButton;// 退出,重列,重新開始按鈕
JLabel fractionLable = newJLabel("0"); // 分數標簽
JButton firstButton, secondButton; // 分別記錄兩次被選中的按鈕
// 儲存游戲按鈕位置(這里其實只要6行,5列。但是我們用了8行,7列。是等於在這個面板按鈕的周圍還圍
//了一層是0的按鈕,這樣就可以實現靠近面板邊緣的兩個按鈕可以消去)
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] = newJButton(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);
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

public void randomBuild() {
int randoms, cols, rows;
for (int twins = 1; twins <= 15; twins++){//一共15對button,30個
randoms = (int) (Math.random() * 25 +1);//button上的數字
for (int alike = 1; alike <= 2; alike++){
cols = (int) (Math.random() * 6 + 1);
rows = (int) (Math.random() * 5 + 1);
while (grid[cols][rows] != 0) {//等於0說明這個空格有了button
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];//記下每個button的數字
n++;//有幾個沒有消去的button
}
}
}
n = n - 1;
this.grid = grid;
while (n >= 0) {//把沒有消去的button重新放一次
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, intplaceY, 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) {//第二個按鈕在空按鈕右邊
for (i = y - 1; i >= j; i--) { //檢測從第二個按鈕橫向左邊到空格所在列為止是否全是空格
if (grid[x][i] != 0) {
k = 0;
break;//存在非空格的就退出,這一退出就不可能k==2了,所以就會到下而215行出同理的判斷列
} else {
k = 1;
} // K=1說明全是空格通過了第一次驗證,也就是從第二個按鈕橫向左邊到空格所在列為止全是空格
}
if (k == 1) {
linePassOne();//進入第二次驗證,也就是從第一個按鈕到它同行的空格之間的空格判斷
}
}

if (y < j) { // 第二個按鈕在空按鈕左邊
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();
}
}

//第三次檢測,檢測確定為空的第j列的那個按鈕豎向到第二個按鈕,看是不是有按鈕
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

//當上面的檢測與第一個按鈕同行的空格按鈕失敗後(不能找到與第二個按鈕的相連路經),下面就執行
//檢測與第一個按鈕同列的空格按鈕
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();
}
}
}
}
}//--------------------------------for
}//-------------else
}//------------xiao

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)
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();
}
}

㈡ 用C++做連連看,要源代碼,能看懂的!!!

VS2005平台開發的,能夠進行聯機對戰。

7*12的排列,排列順序隨機。

代碼附帶十分形象的說明

㈢ 連連看的游戲,用的是什麼原理演算法,求指教一二

連連看核心演算法如下:

#include <iostream>
using namespace std;

int board[102][102];
int nRowCount, nColCount;

bool isHorizontalLineValid(int c1, int c2, int r)
{
if(c1>c2) // 交換 C1, C2
{
c1 ^= c2 ^= c1 ^= c2;
}
for(int i=c1+1; i<=c2-1; i++)
{
if(board[r][i]!=0)
return false;
}
return true;
}

bool isVerticalLineValid(int r1, int r2, int c)
{
if(r1>r2) // 交換 r1, r2
{
r1 ^= r2 ^= r1 ^= r2;
}
for(int i=r1+1; i<=r2-1; i++)
{
if(board[i][c]!=0)
return false;
}
return true;
}

bool check(int r1, int c1, int r2, int c2)
{
// 如果該位置沒有棋子或者兩棋子不一致,則返回假
if(board[r1][c1]==0 || board[r2][c2]==0 || board[r1][c1]!=board[r2][c2])
return false;

// 兩條水平線和一條垂直線
for(int i=0; i<=nColCount+1; i++)
{
if( (i!=c1 && board[r1][i]!=0) || (i!=c2 && board[r2][i]!=0) )
continue;
if( isHorizontalLineValid(i, c1, r1) &&
isVerticalLineValid(r1, r2, i) &&
isHorizontalLineValid(i, c2, r2))
{
board[r1][c1] = board[r2][c2] = 0;
return true;
}
}
// 兩條垂直線和一條水平線
for(int i=0; i<=nRowCount+1; i++)
{
if( (i!=r1 && board[i][c1]!=0) || (i!=r2 && board[i][c2]!=0) )
continue;
if( isVerticalLineValid(i, r1, c1) &&
isHorizontalLineValid(c1, c2, i) &&
isVerticalLineValid(i, r2, c2))
{
board[r1][c1] = board[r2][c2] = 0;
return true;
}
}

return false;
}

int main(int argc, char** argv)
{
int nRound, nSuccess;
int x1, y1, x2, y2;

// 輸入棋盤數據
cin >> nRowCount >> nColCount;
for(int i = 1; i <= nRowCount; ++i)
for(int j = 1; j <= nColCount; ++j)
cin >> board[i][j];

cin >> nRound;

for(int i = 0; i < nRound; ++i)
{
cin >> x1 >> y1 >> x2 >> y2;
if( check(x1, y1, x2, y2) )
cout << "Yes\n";
else
cout << "No\n";
}

system("pause");
return 0;
}

測試數據:
3 4
1 1 2 2
3 3 4 4
2 2 1 1
6
1 1 1 2
1 3 1 4
2 1 2 2
2 3 2 4
3 1 3 2
3 3 3 4

c1 ^= c2 ^= c1 ^= c2;語句中對於a^=b就相當於a=a^b,即代表a與b取位異或運算之後再把值賦給a的。樓主如果覺得還行的話請加點分的哦。

㈣ 求一個簡單又有趣的JAVA小游戲代碼

具體如下:

連連看的小源碼

package Lianliankan;

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;//消除方法控制

代碼(code)是程序員用開發工具所支持的語言寫出來的源文件,是一組由字元、符號或信號碼元以離散形式表示信息的明確的規則體系。

對於字元和Unicode數據的位模式的定義,此模式代表特定字母、數字或符號(例如 0x20 代表一個空格,而 0x74 代表字元「t」)。一些數據類型每個字元使用一個位元組;每個位元組可以具有 256 個不同的位模式中的一個模式。

在計算機中,字元由不同的位模式(ON 或 OFF)表示。每個位元組有 8 位,這 8 位可以有 256 種不同的 ON 和 OFF 組合模式。對於使用 1 個位元組存儲每個字元的程序,通過給每個位模式指派字元可表示最多 256 個不同的字元。2 個位元組有 16 位,這 16 位可以有 65,536 種唯一的 ON 和 OFF 組合模式。使用 2 個位元組表示每個字元的程序可表示最多 65,536 個字元。

單位元組代碼頁是字元定義,這些字元映射到每個位元組可能有的 256 種位模式中的每一種。代碼頁定義大小寫字元、數字、符號以及 !、@、#、% 等特殊字元的位模式。每種歐洲語言(如德語和西班牙語)都有各自的單位元組代碼頁。

雖然用於表示 A 到 Z 拉丁字母表字元的位模式在所有的代碼頁中都相同,但用於表示重音字元(如"é"和"á")的位模式在不同的代碼頁中卻不同。如果在運行不同代碼頁的計算機間交換數據,必須將所有字元數據由發送計算機的代碼頁轉換為接收計算機的代碼頁。如果源數據中的擴展字元在接收計算機的代碼頁中未定義,那麼數據將丟失。

如果某個資料庫為來自許多不同國家的客戶端提供服務,則很難為該資料庫選擇這樣一種代碼頁,使其包括所有客戶端計算機所需的全部擴展字元。而且,在代碼頁間不停地轉換需要花費大量的處理時間。

㈤ 求java小游戲源代碼

[最佳答案] 連連看java源代碼 import javax.swing.*; import java.awt.*; import java.awt.event.*; pu... int x0=0,y0=0,x=0,y=0,fristMsg=0,secondMsg=0,validateLV; //游戲按鈕的位...

熱點內容
家用電腦改成伺服器並讓外網訪問 發布:2025-02-01 15:30:23 瀏覽:354
javac工資 發布:2025-02-01 15:24:28 瀏覽:22
如何刪除伺服器登錄賬號 發布:2025-02-01 15:21:05 瀏覽:498
瑞薩編程器 發布:2025-02-01 15:19:18 瀏覽:85
上海ntp伺服器搭建 發布:2025-02-01 15:03:38 瀏覽:991
c游戲編程基礎 發布:2025-02-01 15:00:17 瀏覽:993
routejs怎麼動態配置 發布:2025-02-01 14:59:07 瀏覽:502
家用電腦安裝伺服器內存 發布:2025-02-01 14:38:50 瀏覽:257
增量調制編解碼實驗報告 發布:2025-02-01 14:30:30 瀏覽:787
不良人2無敵傷害腳本 發布:2025-02-01 14:23:04 瀏覽:398