一、 題目簡介:休閒娛樂連連看
二、原始碼的github連結:https://github.com/zllwxq130/test/blob/master/lianliankan.md
三、結對分工情況
結對人:4109—4112 呂彩霞 — 趙林林
趙林林:掌握程式碼清晰,能力強,主要負責程式碼編輯。
呂彩霞:動手能力強,輸入程式碼快,主要負責題目選擇及輸入執行。
共同任務:執行過程中出現的程式碼錯誤進行修改,共同研究錯誤原因。
四、 結對實踐過程
1、課題設計的目的:
1) 進一步加深對Java語言的理解和掌握;將所學的JAVA知識運用於實踐中。
2) 課程設計將理論與實踐相結合,提供了一個既動手又動腦,獨立實踐的機會,鍛鍊我們的分析解決實際問題的能力,提高學生適應實際,實踐程式設計的能力;
3)熟練掌握JAVA語言中圖形使用者介面程式的編寫;
4)大體瞭解怎樣用JAVA來編寫小遊戲的,增強我們實踐能力和創新精神的綜合培養。
2、課題設計的意義:
近年來,Java作為一種新的程式語言,以其簡單性、可移植性和平臺無關性等優點,得到了廣泛地應用,特別是Java與全球資訊網的完美結合,使其成為網路程式設計和嵌入式程式設計領域的首選程式語言。 一個學期的時間來學習JAVA這門課,我感覺覺得還不錯,因為我們不但學習了書上理論的東西,還安排了上機操作課。我認為學習一門計算機語言必定離不開實踐,只有通過實踐我們才能體會到書本上體會不到的東西。所以,我們不僅要認真學習課本理論知識,更重要的是要通過上機實踐才能增強和鞏固我的知識。課程設計是培養我們綜合運用所學知識 ,發現,提出,分析和解決實際問題,鍛鍊實踐能力的重要環節,是我們實踐能力與創新精神的綜合培養;在實踐能力方面培養我們理論與實踐相結合的作風,增強了我們將來在人才市場上的競爭力。所以,對於我們初學者,首先利用課程設計這樣的較小專案鍛鍊自己的科學研究精神和提高創新能力,是很有必要的。
3、可行性論證:
“連連看“遊戲是一個經典的遊戲,它因操作簡單、娛樂性強而廣受歡迎。我通過所學的JAVA,設計了一個操作簡單、介面美觀、功能較齊全的“連連看”遊戲。通過本遊戲的開發,達到學習Java技術和熟悉軟體開發流程的目的。這個遊 戲是用圖形介面實現的,通過編譯解釋後,出現一個圖開介面。介面是由若干個小方格組成的,每一個小方格里有一個數值,如果在一個邊上有相同的數值,連續點選它們就會消失,同時介面上正上方的分數就會自動加分。遊戲還設有退出,重設,再來一局等功能。
4、連連看演算法設計
在檢驗兩個方塊能否消掉的時候,我們要讓兩個方塊同時滿足兩個條件才行,就是兩者配對並且連線成功。
* 分3種情況:(從下面的這三種情況,我們可以知道,需要三個檢測,這三個檢測分別檢測一條直路經。這樣就會有三條路經。若這三條路經上都是空按鈕,那麼就剛好是三種直線(兩個轉彎點)把兩個按鈕連線起來了)
* 1.相鄰
* 2. 若不相鄰的先在第一個按鈕的同行找一個空按鈕。
1).找到後看第二個按鈕橫向到這個空按鈕所在的列是否有按鈕。
2).沒有的話再看第一個按鈕到與它同行的那個空按鈕之間是否有按鈕。
3).沒有的話,再從與第一個按鈕同行的那個空按鈕豎向到與第二個按鈕的同行看是否有按鈕。沒有的話路經就通了,可以消了.
* 3.若2失敗後,再在第一個按鈕的同列找一個空按鈕。
1).找到後看第二個按鈕豎向到這個空按鈕所在的行是否有按鈕
2).沒有的話,再看第一個按鈕到與它同列的那個空按鈕之間是否有按鈕。
3).沒有的話,再從與第一個按鈕同列的那個空按鈕橫向到與第二個按鈕同列看是否有按鈕。沒有的話路經就通了,可以消了。
* 若以上三步都失敗,說明這兩個按鈕不可以消去。
主要程式碼:
介面設計:
- 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 static void main(String[] args) {
- lianliankan llk = new lianliankan();
- llk.randomBuild();
- llk.init();
- }
- }
消去函式:
- 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();
- }
- }
- }
- }
- }
- }
- }
執行結果:
五、 問題及心得
這次課程設計不僅是對這學期所學知識的
一種綜合檢驗,而且也是對我們團隊合作能力的一種提高,增強了團隊實踐能力。通過這次課程 設計使我明白了自己知識還比較欠缺, 只是學習書本知識還是遠遠不夠的, 自己不會的東西
還有太多,學習需要自己長期的積累,在以後的學習、工作中都應該不斷的學習,將課本的 理論知識與生活中的實踐知識相結合,不斷提高自己文化知識和實踐能力。
在這次的課程設計中不僅檢驗了我們所學習的知識, 也培養了我們的實踐能力,讓我們知道遇到一個問題,如何去尋找思路,如何去解決問題,最終
完成整個事情。