連連看游戲課程設計
⑴ 連連看游戲設計與實現
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<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)
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();
}
}
//old 998 lines
//new 318 lines
⑵ 連連看游戲的編程思想
連連看
應該是能轉2個彎吧<-這個不清楚
然後你從某個點出發向四周遞歸尋找。。最多隻能轉兩次就行啦
主要思想是遞歸
⑶ c語言連連看課程設計求代碼
你好!
這個課設有新意,矩陣是幾乘幾的呢
⑷ 我需要一篇基於java的連連看游戲設計與實現的畢業設計及論文
畢業後你打算幹啥呢?
不如趁現在有時間好好練習下,碰到的問問先都學學。
⑸ 基於flash的連連看游戲的設計與實現怎麼做啊
基於flash的連連看游戲的設計與實現這個其實不難的啊我可以幫你做的我的網名是:IT服務/aiq
⑹ 如何用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();
}
}
⑺ PPT課件中的連連看游戲是怎樣製作的
http://wenku..com/link?url=vh6OYtYCSS2rR2se8BQsPsJ_-5e9g48wUUTsRKm
詳細過程
此外,連連看開發工具還用Flash 8.0,
PPT:
現在計算機的大批量普及和多媒體技術的發展,運用多媒體上課已逐漸成為一種趨勢。因而製作課件將成為當前各教師的一項基本功,各校也積極的、有針對性的開展一些多媒體課件製作的校本培訓。 現在應用最廣泛的多媒體課件形式是 PPT(用office PowerPoint 製作的幻燈片),由於它編輯、播放,各種操作簡單易學。
⑻ 求flash製作連連看游戲的編程思路,謝謝。
在設計採用單機模式,當在規定的時間內消完全部的圖片則當前關卡通過,若果在規定的時間內沒能消完所有的圖片則游戲結束,重新開始游戲。游戲規則是模仿普通的連連看游戲,主要是滑鼠兩次點擊的圖片是否消去的問題,當前,前提是點擊兩張相同的圖片,若點擊的是同一張圖片或者兩張不同的圖片,則不予處理。在兩張相同的圖片用三根以內的直線連在一起,就可以消去;否則,不予處理。
游戲過程,如果玩家在一定的時間內消完則提示玩家勝利,並進入下一關。如果在一定的時間內圖片沒有消完則提示玩家時間到。每關以此類推。
一、 所有圖片都是按約定好的種類數和在同一區域的重復次數隨機出現,並且每張圖片的出現次數為偶數,時間會有限制,每一關的圖片數量或時間是不同的,這樣就增加了游戲的難度。
二、 在同一區域中,圖片出現的種類數和重復數是可以由玩家選擇的,時間由游戲約定。不過玩家選擇的種類數和重復次數必須是偶數才可以順利完成游戲,否則游戲雖然可以正常運行,但無法完成游戲。
在一種方案中,由於出現的圖像按種類數和重復數都由軟體約定,這樣就缺乏玩家自主選擇的空間,只是在完系統已經是設定好的游戲,不能改變什麼,這樣就在無意中降低了玩家在游戲過程中的樂趣,最後致使玩家放棄繼續玩下去。我們參考了網路上的連連看游戲,考慮到游戲的娛樂性。所以我們放棄第一種方案的設計思想,參考網路上流行的連連看游戲,設計第二種方案。
3主要問題
開始製作游戲時,主要解決問題有以下幾個方面:如何設置整個游戲的界面;如何控制連連看游戲中隨機圖片的生成且每種圖片必須為偶數個;游戲開始後,判斷滑鼠兩次點擊的圖片能否消去,即圖片是否相同且圖片之間路徑的判斷;如何判斷游戲是否結束以及輸贏問題等。
3.4技術要求
本游戲軟體可以再大多數計算機上運行,游戲中能正確判斷滑鼠兩次點下的圖片是否可以消去、能正確判斷游戲是否已經結束。
4、 系統設計:
針對上面的需求分析,我們把整個軟體分成兩個模塊:1、整體界面的設計和圖片的隨機生成;2、圖片路徑判斷函數;
一下就是系統結構圖:
4.1基本思路
4.1.1游戲畫面問題的思路
畫面,對於設計者來說,可以算是最簡單的地方;但對於玩家,這卻是最重要的,一般玩家不會關心你是怎麼實現的,他所關心的是畫面的美觀,漂亮,是不是能讓人賞心悅目。
.2獲取圖片位置的思路
通過數組從圖片庫隨即獲取規定個數的圖片,隨機分布在畫布上。圖片個數一定是個偶數個。
4.1.3 路徑判斷的思路
連連看所要求的是:
1:兩個目標是相同的
2:兩個目標之間連線的折點不超過兩個。(連接線由x軸和y軸的平行線組成)那麼分析一下連接的情況可以看到,一般分三種情況
1:直線相連2:一個折點3:兩個折點;
可以發現,如果有折點,每個折點必定有且至少有一個坐標(x或者y)是和其中一個目標點是相同的,也就是說,折點必定在兩個目標點所在的x方向或y方向的直線上。
所以設計思路就是:
假設目標點p1,p2,如果有兩個折點分別在z1,z2那麼,所要進行的是
1:如果驗證p1,p2直線連線,則連接成立
2:搜索以p1,p2的x,y方向四條直線(可能某兩條直線會重合)上的有限點,每次取兩點作為z1,z2,驗證p1到z1/z1到z2/z2到p2是否都能直線相連,是則連接成立。
4.1.4其他問題的思路
其他功能將在後面的具體各個部分的設計過程當中分別進行介紹。
4.2主界面的設計
由於這個程序的界面並不是很復雜,所以用到的控制項也不多,主要核心內容還是後台的代碼設計。圖片的隨機生成主要是用到一個random()函數將隨機數賦值給flag[ ]數組中的每個元素,然後根據數組元素值,來顯示圖片。
4.2.1界面的設計
1、色彩上:總結人們的視覺習慣和色彩對眼睛的健康影響,決定對於畫布採用黑色背景,神秘而大方;右邊的控制區採用天藍色,配合左邊純黑的背景,就像黑夜中的藍天,純潔而大方。
2、功能上:背景就是窗體,右側是一個groupbox控制項,用來放置控制按鈕,下方是一個grogressbar控制項,用來顯示時間條。
4.2.2圖片的隨機生成
實現這個功能要分很多個步驟:
1. 程序運行時即載入游戲需要的N張圖片,默認情況下圖片種類是18,重復數是4(重復數必須是偶數),並且可以選擇是否重列。通過一個循環,載入隨機的選擇N種圖片。具體載入圖片的代碼如下:
private void InteBmp(int maxnum)
{
g_g=this.Creatphics();
for(int i=0;i<MAPWIDTH;i++)
for(int j=0;j<WAPHEIGHT;j++)
gamp[i,j]=0;
IniteRandoMap(ref gamp,maxnum);
AI=new Kernal(ref gmap);
for(int i=0;i<maxnum;i++)
{
ResourceManager rm=new ResourceManager(「LLK data」,Assembly,GetExecut ingAssembly() );
img[i]=(Image)rm.GetObject(i.ToString( )+」.bmp」);
//img[i]=(Image)Bitmap.FormFile(「Images\\」+(i+1). ToString( )+」.bmp」);
}
for(int i=0;i<6;i++)
{
//bombimg[i]=(Image)Bitmap.FromFile(「Image\\B」+(i++). ToString( )+」.bmp」);.
}
}
2. 當確認游戲開始時,通過畫圖過程完成圖片生成,畫圖的過程代碼如下
private bool CheckWin(ref int[,]map)
{
Bool Win=true;
for(int i=0;i0)
{
for(int i=0;i<multipic;i++)
{
Int xrandom=r.Next(19);
Int yrandom=r,Next(11);
If(map[xrandom,yrandom]==0)
{
map[xrandom,yrandom]=num;
}
else
i--;
}
num--;
}
}
private void FreshMap(ref int[,]map)
{
random r=new Random();
for (int i=0;i<MAPWIDTH;i++)
for(int j=0;j<MAPHEIGHT;j++)
{
if(gmap[i,j]!=0)
{
int x=r.Next(19);
int y=r.Next(11);
int temp=gmap[x,y];
gmap[x,y]=gmap[i,j]
gmap[i,j] =temp;
}
TransportMap(ref gmap);
}
private void TransportMap(ref int[,]map)
{
for (int i=0;i<MAPWIDTH;i++)
for(int j=0;j<MAPHEIGHT;j++)
{
AI.GiveMapValue(i,j,map[i,j]);
}
}
//在指定位置畫指定圖
private void Draw(Graphics g,Image scrImg,int PicxX,int PicV)
{
g.DrawImage(scrImg,new Point(PicX,PicV));
}
private void Forml_Paint(object sender,PaintEventArg e)
{
g_g.DrawLine(new.Pen(newSolidBrush(Color.DeepSkyBlue),5),0,11*34+5,19*34
,11*34+5);
If(bStart)
{
For(int i=0;i209)
{
MessageBox.Show(「游戲區域內最多隻有209個孔,您選的數據太多!請重新選!」);
textBox1.Text=」18」;
textBox2.Text=」4」;
return;
}
IniteBmp(picnum);
If(bStart)
{
MessageBox.Show(「游戲已在運行!」);
return;
}
else
{
bStart=true;
this.Invalidate();
music.Play(「Sounds\\ bg-03.mid」);
}
}
重新實現代碼如下:
Private void RefreshMap(ref int[,] map)
{
if ( int i=0;i<MAPWIDTH;i++)
for(int j<MAPHEIGHT;j++)
{
If(gmap[I,j]!=0)
{
Draw(g_g,img[gmap[I,j]-1],i*PICWIDTH,j*PICHEIGHT);
}
}
}
private void FreshMap(ref int[,] map)
{
Random r=new Random();
for(int i=0;j<MAPWIDTH;i++)
for(int j=0;j<MAPHEIGHT;j++)
{
if(gmap[I,j]!=0)
{
int x=r,Nex(19);
int y=r,Nex(11);
int temp=gmap[x,y];
gmap[x,y]=gmap[I,j];
gmap[I,j]=temp;
}
}
TransportMap(ref gmap);
}
Private void button2_Click(object sender,EventArgs e)
{
Refreshplayer.Play();
FreshMap(ref gmap);
This.Invalidate();
}
4.2.4得分設置
本游戲一改前人風格,採用全新計分方式,使人們在尋找相同圖片的同時還注意路徑的選擇,更增加了游戲的趣味性,具體規則:直連得10分,一個拐點的20,兩個拐點得40.用一個Label控制項存儲得分。
實現代碼:
Switch(corner[2].X)
{
Case1;
Score+=20;//一個拐點加20;
g_g.DrawLine(pen,new Point(p1.X*31+15,p1.Y*34+17),new
Point(corner[0].X*31+15,corner[0],Y*34+17)),;
g_g.DrawLine(pen,new point(p2.X*31+15,p2.Y*34+17),new
Point(corner[0].X*31+15,corner[0],Y*34+17));
Thread.Sleep(100);
EraseBlock(g_g,p1,p2);
g_g.DrawLine(bkpen,new Point(p1.X*31+15,p1.Y*34+17)new
Point(corner[0].X*31+15,corner[0],Y*34+17);
g_g.DrawLine(bkpen,new Point(p1.X*31+15,p2.Y*34+170new
Point(corner[0].X*31+15,corner[0],Y*34+17);
break;
case 2;
score+=40;
Point[ ]ps={new Point(p1.X*31+15,p1.Y*34+17),new<br/> Point(corner[1].X*31+15,corner[1],Y*34+17),new<br/> Point(corner[0].X*31+15,corner[0],Y*34+17),newPoint(p2.X*31+15,p2.Y*34+17));<br/> g_g.DrawLine(pen,ps);<br/> Thread.Sleep(100);<br/> EraseBlock(g_g,p1,p2);<br/>//foreach(Point mp in ps)<br/>//{<br/> //MessageBox.Box.Show(「+mp.X.ToString( )+」,」+mp.Y.ToString( )+」)」));<br/>//}
break;
case 0;
score+=10;
g_g.DrawLine(pen,ps);Point(corner[0].X*31+15,corner[0],Y*34+17),newPoint(p2.X*31+15,p2.Y*34+17));
Thread.Sleep(100);
EraseBlock(g_g,p1,p2);
g_g.DrawLine(pen,ps);Point(corner[0].X*31+15,corner[0],Y*34+17),newPoint(p2.X*31+15,p2.Y*34+17));
break;
default:break;
}
//RefreshMap(ref gmap)
Label5.Text=score.ToString( );
參考:知道回答 #564313762
⑼ 連連看游戲設計與實現論文怎麼答辯
連連看游戲設計與實現論簡\
通常的想法發