1. 程式人生 > >俄羅斯方塊的 C++實現

俄羅斯方塊的 C++實現

原始碼下載地址:http://download.csdn.net/detail/lt_lover/9721862

最近想寫一個俄羅斯方塊,正好電腦裡面有個以前下的程式碼,於是就看了看思路,然後自己加了一些東西,要是忘了就不好了

先做7個不同型別的方塊,分別為 長條形、方形、L形、反L形、Z形、反Z形、土字形。用一個二維陣列儲存每個形狀,每個形狀使用4個點,每個點代表每種形狀的一個小方格,比如:{ 0, 0, 0, 1, 0, 2, 0, 3, FOREGROUND_RED | FOREGROUND_INTENSITY }  就是點(0,0)、(0,1)、(0,2)、(0,3) 4個點,最後一個引數是顏色,這個是紅色高亮,如圖:


然後用一個數組儲存所有圖形的高度,消除的時候需要用到高度,上面長條的高度就是1。

下面是程式碼,定義的時候每個形狀的初始狀態標號分別為0,1,2,3,4,5,6,變換的形狀為7--18,先是標頭檔案,Tetris.h:

  1. #ifndef TETRIS_H_
  2. #define TETRIS_H_
  3. #include <windows.h>
  4. //長條形
  5. constint A1 = 0;  
  6. constint A2 = 7;  
  7. //方塊
  8. constint B = 1;  
  9. //L 形狀
  10. constint C11 = 2;  
  11. constint
     C12 = 8;  
  12. constint C13 = 9;  
  13. constint C14 = 10;  
  14. //L 的另一個形狀
  15. constint C21 = 3;  
  16. constint C22 = 11;  
  17. constint C23 = 12;  
  18. constint C24 = 13;  
  19. //Z 形狀
  20. constint D11 = 4;  
  21. constint D12 = 14;  
  22. //Z 的另一個形狀
  23. constint D21 = 5;  
  24. constint D22 = 15;  
  25. //土字形
  26. constint E31 = 6;  
  27. constint E32 = 16;  
  28. constint E33 = 17;  
  29. constint E34 = 18;  
  30. class tetris  
  31. {  
  32. private:  
  33.     int map[12][23];        //背景
  34.     int top;            //當前的最高點
  35.     int score;          //分數
  36.     int level;          //難度等級
  37.     int ID;             //當前的方塊的形狀
  38.     int hotPoint[2];        //熱點,當前活動的所在點   
  39. public:  
  40.     tetris()  
  41.     {  
  42.         for (int i = 0; i < 12; i++)<span style="white-space:pre">     </span>//初始化地圖
  43.         for (int j = 0; j < 23; j++)  
  44.             map[i][j] = 0;  
  45.         top = 99;  
  46.         score = 0;  
  47.         level = 1;  
  48.         ID = 0;  
  49.         hotPoint[0] = 5;    //下落起始點的橫座標
  50.         hotPoint[1] = 0;    //下落起始點的縱座標
  51.     }  
  52.     void DrawMap();         <span style="white-space:pre">    </span>//繪製地圖
  53.     void initInterface();           //初始化介面
  54.     void DrawBox(int x, int y, int id); //繪製圖形
  55.     void ReBox(int x, int y, int id);   //擦除圖形
  56.     int  IsJudge(int x, int y, int id); //是否可以繪製圖形
  57.     int  TurnBlock(int id);         //旋轉方塊
  58.     void UpdateMap(int id);         //更新畫面
  59.     void RunGame();             //執行
  60. };  
  61. #endif
下面就是包含所有形狀的二維陣列,最後一個數是顏色,還有包含每個形狀的高度的陣列:
  1. int sharp[19][9] =                  //每個一維陣列內有8個點,每兩個點是一個 形狀的一個小方格,在4*4的表格中
  2. {  
  3.     { 0, 0, 0, 1, 0, 2, 0, 3, FOREGROUND_RED | FOREGROUND_INTENSITY },          //長條形
  4.     { 0, 0, 1, 0, 0, 1, 1, 1, FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY },   //方形
  5.     { 0, 0, 0, 1, 1, 1, 2, 1, FOREGROUND_GREEN | FOREGROUND_RED },              //L形
  6.     { 0, 1, 1, 1, 2, 1, 2, 0, FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY },  //反L形
  7.     { 0, 0, 1, 0, 1, 1, 2, 1, FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_INTENSITY },    //Z形
  8.     { 1, 0, 2, 0, 0, 1, 1, 1, FOREGROUND_GREEN | FOREGROUND_INTENSITY },            //反Z形
  9.     { 0, 0, 0, 1, 0, 2, 1, 1, FOREGROUND_BLUE | FOREGROUND_INTENSITY },     //土形
  10.     //下面是上面形狀的變換
  11.     { 0, 0, 1, 0, 2, 0, 3, 0, FOREGROUND_RED | FOREGROUND_INTENSITY },                        
  12.     { 1, 0, 1, 1, 1, 2, 0, 2, FOREGROUND_GREEN | FOREGROUND_RED },  
  13.     { 0, 0, 1, 0, 2, 0, 2, 1, FOREGROUND_GREEN | FOREGROUND_RED },  
  14.     { 0, 0, 1, 0, 0, 1, 0, 2, FOREGROUND_GREEN | FOREGROUND_RED },  
  15.     { 0, 0, 1, 0, 1, 1, 1, 2, FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY },  
  16.     { 0, 0, 1, 0, 2, 0, 0, 1, FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY },  
  17.     { 0, 0, 0, 1, 0, 2, 1, 2, FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY },  
  18.     { 1, 0, 0, 1, 1, 1, 0, 2, FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_INTENSITY },  
  19.     { 0, 0, 0, 1, 1, 1, 1, 2, FOREGROUND_GREEN | FOREGROUND_INTENSITY },  
  20.     { 0, 0, 1, 0, 2, 0, 1, 1, FOREGROUND_BLUE | FOREGROUND_INTENSITY },  
  21.     { 0, 1, 1, 0, 1, 1, 1, 2, FOREGROUND_BLUE | FOREGROUND_INTENSITY },  
  22.     { 1, 0, 0, 1, 1, 1, 2, 1, FOREGROUND_BLUE | FOREGROUND_INTENSITY }  
  23. };  
  24. int high[19] = { 4, 2, 2, 2, 2, 2, 3, 1, 3, 2, 3, 3, 2, 3, 3, 3, 2, 3, 2 };  //陣列是用來儲存上面每個一維陣列的各個形狀高度的
設定游標位置的函式,同時設定輸出的顏色:
  1. void setCurPos(int i, int j, int color = 1 | 2 | 4) 
  2. {                           <span style="white-space:pre">    </span>//color相當於自己選擇顏色,沒有就用預設的白色
  3.     HANDLE out = GetStdHandle(STD_OUTPUT_HANDLE);       //獲得標準輸出控制代碼
  4.     SetConsoleTextAttribute(out, color);<span style="white-space:pre">            </span>//設定顏色
  5.     COORD pos = { i * 2, j };  
  6.     SetConsoleCursorPosition(out, pos);<span style="white-space:pre">         </span>//設定位置
  7. }  
下面是畫地圖的函式,地圖是長12,寬23的地圖,然後用白塊做一圈外圍,外圍比地圖大1,下面是程式碼:
  1. void tetris::DrawMap()  
  2. {  
  3.     

    相關推薦

    C語言之俄羅斯方塊遊戲實現

      來自《C語言課程設計案例精編》,蠻好的,可以參照。 /*  *俄羅斯方塊源程式  */ #include <stdio.h> #include <stdlib.h> #include <dos.h> #include <grap

    ccf學習 俄羅斯方塊c++ 50分

    寫俄羅斯方塊的程式只有50分 邏輯也是比較坑坑巴巴 乾乾巴巴麻麻賴賴的一點都不圓潤 有沒有大神看到的可以指導一下的哦 嚶嚶嚶 #include <iostream> /* run this program using the console pau

    CocosCreater的俄羅斯方塊遊戲實現

    前段時間要做課程設計,發現可以做俄羅斯方塊,就想著用cocoscreater做一個俄羅斯方塊遊戲,順便發上來。 內容就偷個懶,從自己的課程設計拿過來,不再寫了。。自己也記錄一下構思過程。 當然,首先要把連結發上來: 接下來就照著自己的設計論文一一複製上來啦。 要文件的直接

    俄羅斯方塊c/c++語言程式碼

    /*******************************/ /******Writer: GJ *******/ /******Language: C *******/ /******Date: 2013 3 23 *

    俄羅斯方塊C語言

    思路: 1.初始化介面,用一個矩陣來儲存介面的每一個位置,包括顏色跟數值,數值用來區分是牆還是方塊還是空格,便於執行時的判斷。 2.初始化方塊,用4*4矩陣儲存,1表示方塊,0表示空格。初始7個方塊,再利用矩陣旋轉,得到剩下的21個方塊。 3.執行時先判斷

    C++藉助curses庫實現俄羅斯方塊

    主要要實現如下幾個功能:方塊的移動控制、方塊變形、判定方塊是否接觸邊界和進行方塊堆積、對方塊進行消除。 1.方塊的移動控制上下左右四個方向上-->變形,下-->加速下落,左-->向左移動,右-->向右移動注意在移動的時候,還要判定是否接觸邊界,特別是向下移動,除了需要確定是否接觸底部

    offer(一): 俄羅斯方塊成功次數輸出 C++實現

    題目連結:https://www.nowcoder.com/test/question/done?tid=20189002&qid=224352 題目描述: 小易有一個古老的遊戲機,上面有著經典的遊戲俄羅斯方塊。因為它比較古老,所以規則和一般的俄羅斯方塊不同。 熒幕上一共有 n

    C語言實現俄羅斯方塊

    看下游戲介面: 不知道怎麼介紹,直接上程式碼: Model.h #pragma once #define FACE_X 20 #define FACE_Y 29 #define WALL 2 #define BOX 1 #define KONG 0 typ

    俄羅斯方塊程式碼——c++實現

    用codeblock實現不了,缺少庫函式,windows的kpi。555 現在還麼解決辦法,不過程式碼挺好的,貼吧大神多。 2017-5-2 #include<windows.h> #include<time.h> #inclu

    C語言】實現俄羅斯方塊

    學習了C語言,寫一個俄羅斯方塊,程式碼絕對可以執行 大神勿笑,只適合初學者 本人也是菜鳥 1、考慮怎麼儲存俄羅斯方塊 俄羅斯方塊的形狀一共有19種類型,如果拿陣列來表示的話,可能會比較會浪費空間(網上有很多實現程式碼) 考慮到每種方塊形狀的

    俄羅斯方塊C++實現

    原始碼下載地址:http://download.csdn.net/detail/lt_lover/9721862 最近想寫一個俄羅斯方塊,正好電腦裡面有個以前下的程式碼,於是就看了看思路,然後自己加了一些東西,要是忘了就不好了 先做7個不同型別的方塊,分別為

    VC++ 6.0 C語言實現俄羅斯方塊教程

    今天把我之前寫的大作業分享一下吧,並教你們如何實現,希望你們看了前面的教程也能自己寫一個。 1.要先下載一個 graphics.h 的標頭檔案來繪圖。 2.初始化視窗:initgraph(x, y);這是先建立一個視窗的函式,以左上角為(0,0),向右為x軸,

    純JavaScript實現俄羅斯方塊(詳細註釋

    learn 基本 nload alt log ref 遊戲截圖 www tar 借鑒了慕課網的課程《基於websocket的火拼俄羅斯(單機版)》雖然改動比較多,但是還是核心部分沒有改,加了一些不怎麽好聽的聲音,和看起來並不好看的界面。 CSS部分基本是瞎寫的,因為對於H

    用JS實現俄羅斯方塊

    javascript 小遊戲 一邊練習一下javascript,一邊搞的稍微有趣一點。這次的界面就是個table表格。其實所有的操作只要操作tabel的class就可以了。我這裏把顏色直接用 cell.style.backgroundColor 來設置內聯樣式的屬性了。完整代碼如下,預先顯示下一個方塊

    pyqt 實現俄羅斯方塊

      from PyQt5.QtWidgets import QMainWindow, QFrame, QDesktopWidget, QApplication from PyQt5.QtCore import Qt, QBasicTimer, pyqtSignal from PyQt5.Qt

    c++寫俄羅斯方塊小遊戲

    第二篇部落格 把我之前用c++寫的一個俄羅斯方塊也傳上來算了,這個程式是我學完c++後寫的,雖然有點長,看起來比較嚇人,但是程式碼絕對是你能夠找到的理解起來最簡單的俄羅斯方塊的程式碼,對於一些基礎不好的同學還是非常友好的。(歡迎批評指正) #include<iostream>

    QT/c++ 簡易俄羅斯方塊

    第一次用QT寫的小專案,一切為了實現效果不擇手段,沒注意優化演算法什麼,後期也懶得去改了,遊戲目前還有個小bug,消兩行只加一行的分數,懶鬼實在不想改了。 此文單純留作記錄。 另外樣式表內容參考《QT CREATOR快速入門第三版》,不得不說這本書對於萌新真的很友好。 大概介面

    AI—玩俄羅斯方塊(Python實現

    目錄 環境 程式碼實現 這是AI自動玩俄羅斯方塊遊戲的Demo。 環境 安裝Python3  網站:https://www.python.org/ 安裝PyQt5模組 pip install PyQt5 安裝NumPy模組 pip

    [文件和原始碼分享] 基於Python的PyGame的俄羅斯方塊遊戲設計與實現

    近年來,隨著遊戲產業的突飛猛進,遊戲玩家的技術也是與日俱增,當你看見遊戲高手完美的表演時,你是否想過我也能達到那種水平,本程式用Python語言編寫俄羅斯方塊,左側顯示正在執行的遊戲,右邊顯示下一個出現的形狀、等級和積分等。遊戲執行時隨著等級的提高而速度加快,這需要玩家快速操作。因此,本程式主要意義是為高手玩

    CCF計算機軟體能力認證 C++ 俄羅斯方塊

    問題描述   俄羅斯方塊是俄羅斯人阿列克謝·帕基特諾夫發明的一款休閒遊戲。   遊戲在一個15行10列的方格圖上進行,方格圖上的每一個格子可能已經放置了方塊,或者沒有放置方塊。每一輪,都會有一個新的由4個小方塊組成的板塊從方格圖的上方落下,玩家可以操作板塊左右移動放到合適的