c++實現(xiàn)俄羅斯方塊游戲代碼
俄羅斯方塊c++
1.創(chuàng)建項目
2.總共需要創(chuàng)建兩個文件,一個main.cpp,一個是elsfk2.h。本人使用的編譯器是vs2019.
3.在項目的源文件夾下創(chuàng)建一個文件夾image
4.把下面兩張圖片重命名好放進(jìn)剛創(chuàng)建的文件夾
elsfk.jpg
elsfk_block.jpg
5.把下列代碼分別復(fù)制到對應(yīng)文件中
----------------------------------------------------------------------------------- 以下是main.cpp 文件的內(nèi)容 #include"elsfk2.h" int main() { srand((int)time(0)); //創(chuàng)建游戲窗口 RenderWindow window(VideoMode(COL*18/*+100*/, ROW*18-36),"ELSFK"); //添加游戲背景 Texture t1,t2; t1.loadFromFile("image/elsfk.jpg"); t2.loadFromFile("image/elsfk_block.jpg"); Sprite sprite_Bg(t1); Sprite sprite_block(t2); NewBlock(); Clock begin; float time1 = 0, time2 = 0; while (window.isOpen()) { time2 = begin.getElapsedTime().asSeconds(); begin.restart(); time1 += time2; //等待用戶按下按鍵 keyEvent(&window); if (time1 > delay) { time1 = 0; blockDrop(); } delay = SPEED_NOM; window.draw(sprite_Bg); drawBlock(&sprite_block, &window); window.display(); } } -------------------------------------------------------------------------------- 以下為elsfk2.cpp #pragma once #include<SFML/Graphics.hpp> //圖像處理頭文件 //#include<SFML/Audio.hpp> #include<time.h> using namespace sf; #define ROW 22 //行 #define COL 10 //列 #define SPEED_NOM 0.5 //不加速運動的時間間隔 #define SPEED_QIK 0.05 //加速運動的時間間隔 int map[ROW][COL] = { 0 }; //游戲區(qū)域大小 int blocktype; //方塊類型 int Delete=0; //刪除的行數(shù) float delay = SPEED_NOM; //時間間隔 void Move_x(int); void Rotate(); void ClearBlock(); void NewBlock(); void blockDrop(); void keyEvent(RenderWindow*); void drawBlock(Sprite*, RenderWindow*); bool check(); //存放7種方塊的二維數(shù)組 int a[7][4] = { 1,3,5,7, 2,4,5,7, 3,5,4,6, 3,5,4,7, 2,3,5,7, 3,5,7,6, 2,3,4,5, }; //點的結(jié)構(gòu)體 struct point { int x, y; }; //當(dāng)前方塊 point block[4]; //方塊的備份 point bakblock[4]; //處理按鍵 void keyEvent(RenderWindow *w) { Event e; bool rotate = 0; int x = 0; while (w->pollEvent(e)) { if (e.type == Event::Closed) { w->close(); } if (e.type == Event::KeyPressed) { switch (e.key.code) { case Keyboard::Up: rotate = 1; break; case Keyboard::Left: x = -1; break; case Keyboard::Right: x = 1; break; default: break; } } if (Keyboard::isKeyPressed(Keyboard::Down)) { delay = SPEED_QIK; } if (x) { Move_x(x); } if (rotate) { Rotate(); } } } //消除完成的行 void ClearBlock() { int k = ROW - 1; for (int i = ROW - 1; i > 0; i--) { int count = 0; for (int j = 0; j < COL; j++) { if (map[i][j]) { count++; } map[k][j] = map[i][j]; } if (count < COL) { k--; } } } //檢查移動合理性 bool check() { for (int i = 0; i < 4; i++){ if( block[i].x<0||block[i].x>=COL||block[i].y>=ROW|| map[block[i].y][block[i].x]){ return 0; } } return 1; } //方塊降落 void blockDrop() { for (int i = 0; i < 4; i++) { bakblock[i] = block[i]; block[i].y++; } if (!check()) { for (int j = 0; j < 4; j++){ map[bakblock[j].y][bakblock[j].x] = blocktype; } NewBlock(); ClearBlock(); } } //左右移動 void Move_x(int x) { for (int i = 0; i < 4; i++){ bakblock[i] = block[i]; block[i].x += x; } if (!check()) { for (int i = 0; i < 4; i++) { block[i] = bakblock[i]; } } } //旋轉(zhuǎn)****************************** important void Rotate() { if (blocktype == 7) { return; } point p = block[1]; for (int i = 0; i < 4; i++) { bakblock[i] = block[i]; block[i].x = p.x - bakblock[i].y + p.y; block[i].y = bakblock[i].x - p.x + p.y; } if (!check()) { for (int i = 0; i < 4; i++) { block[i] = bakblock[i]; } } } //生成方塊 void NewBlock() { blocktype = 1 + rand() % 7; for (int i = 0; i < 4; i++) { block[i].x = a[blocktype-1][i] % 2+4; block[i].y = a[blocktype-1][i] / 2; } } //繪制方塊 void drawBlock(Sprite *b, RenderWindow *w) { //完成的方塊 for (int i = 0; i < ROW; i++) { for (int j = 0; j < COL; j++) { if (map[i][j] != 0) { b->setTextureRect(IntRect(map[i][j]*18,0,18,18)); b->setPosition(j * 18, i * 18); b->move(0, -36); w->draw(*b); } } } for (int j = 0; j < 4; j++) { b->setTextureRect(IntRect(blocktype * 18, 0, 18, 18)); b->setPosition(block[j].x * 18, block[j].y * 18); b->move(0, -36); w->draw(*b); } }
到此這篇關(guān)于c++實現(xiàn)俄羅斯方塊游戲代碼的文章就介紹到這了,更多相關(guān)c++俄羅斯方塊內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++?Boost?MultiArray簡化使用多維數(shù)組庫
Boost是為C++語言標(biāo)準(zhǔn)庫提供擴(kuò)展的一些C++程序庫的總稱。Boost庫是一個可移植、提供源代碼的C++庫,作為標(biāo)準(zhǔn)庫的后備,是C++標(biāo)準(zhǔn)化進(jìn)程的開發(fā)引擎之一,是為C++語言標(biāo)準(zhǔn)庫提供擴(kuò)展的一些C++程序庫的總稱2022-11-11C++ 數(shù)據(jù)類型強(qiáng)制轉(zhuǎn)化的實現(xiàn)
這篇文章主要介紹了C++ 數(shù)據(jù)類型強(qiáng)制轉(zhuǎn)化的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02VSCode 搭建 Arm 遠(yuǎn)程調(diào)試環(huán)境的步驟詳解
這篇文章主要介紹了VSCode 搭建 Arm 遠(yuǎn)程調(diào)試環(huán)境的步驟詳解,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-04-04