1. 程式人生 > >VC實現俄羅斯方塊的基本功能

VC實現俄羅斯方塊的基本功能

遊戲設計思路:
俄羅斯方塊遊戲設計的主要步驟為以下10個方面:
(1)遊戲介面的設計。
(2)俄羅斯方塊的造型。
(3)俄羅斯方塊的旋轉。
(4)俄羅斯方塊的運動情況(包括向左,向右和向下)。
(5)俄羅斯方塊的自動消行功能。
(6)遊戲級別的自由選擇。
(7)遊戲速度的自由選擇。
(8)遊戲得分的計算。
(9)遊戲選單選項的設計及功能實現。
(10)遊戲的背景音樂及特效。
2.4運用的控制元件和主要物件
我們在設計過程中主要用到的控制元件有:command控制元件,image控制元件,picture控制元件,label控制元件timer控制元件,text控制元件,windows media player控制元件等等。
2.5主要實現的功能
我們開發的俄羅斯方塊遊戲,主要實現了以下幾種功能:
1.可以靈活控制方塊在圖形框中運動。
2.遊戲過程中方塊可以自由旋轉。
3.當某一行的方塊排列滿時,將自動將這一行方塊消除,然後將上面所有方塊向下移動,可以支援連續消行。
4.遊戲前可以選擇遊戲的速度和遊戲的等級,遊戲速度既為方塊下落速度,遊戲等級為初始遊戲時在基層隨機生成一定行數的無規律方塊,生成的行數由你來選擇,每行至少產生5個以上的無規律方塊,這樣增加了遊戲難度,對於遊戲高手來說,無疑不是一個新的挑戰。
5.遊戲的得分支援積分,並且按照公式:
得分 = 原來分數+ 100 * (2 ^ 同時消除的行數-1)
       這樣,你同一時間消除的行數越多,你的得分也就越高,當遊戲積分到了一定時可以自動升級,這個升級指速度升級。
6.遊戲中提供了一個漂亮的場景和動聽的音樂,給你帶來無限激情。
正文
3.1.1遊戲介面的設計和背景音樂及特效的實現
俄羅斯方塊遊戲主要由兩個介面構成,登陸介面和開始遊戲介面,在登陸介面中我們可以首先看到聖誕節的晚上飄梅花的場景,梅花從窗體頂部做函式曲線的下落運動,在窗體中定義一個Image控制元件組,在通用中定義梅花X座標變數動態陣列,Y座標變數動態陣列,步距X的變數動態陣列,步距Y的變數動態陣列,以及振幅變數動態陣列。然後在窗體form_load中可以定義梅花的數量,利用隨機函式產生隨機的梅花座標,步距和振幅,Image控制元件在執行時候就呼叫梅花圖片,Image控制元件就可以由時鐘控制元件控制下落速度,可以自由調節,梅花按snow(i).Left = xp(i) + am(i) * Sin(dx(i))函式在做縱向的正玄函式軌跡運動,豎直方向上為自由下落運動,,有am(i)來控制梅花的左右移動振幅。因此,我們就可以看到一個梅花在空中自由飄舞的畫面了。
背景畫面是用photoshop軟體處理的漂亮圖案,原本畫面中的動畫效果都是由Image控制元件製作的,還有點選進入遊戲的按鈕是由
Label控制元件
實現的,因為Image控制元件沒有置前置後功能,不能將下雪的場景體現完整性,所以將這些圖案全部放在背景上,不影響雪花飄落的效果,當點選畫面的時候一樣可以進入遊戲介面。 遊戲的背景音樂是由一段程式碼呼叫系統播放器Windows Player播放背景音樂,由於本次設計主要是針對遊戲如何設計的,所以在這裡就不對播放背景音樂的功能做介紹了。 3.1.2俄羅斯方塊的造型 相信朋友們都玩過俄羅斯方塊,對這個遊戲的玩法和方塊形狀都比較熟悉。我們這個遊戲只選擇了最基本的7中造型,包括長條型,正方型,正S型,反S型,正7型,反7型,T型。如果需要我們可以新增更多的造型。將遊戲介面的遊戲區圖片框分割成10*20的小塊,每個小塊放置一個command控制元件,預覽區圖片框按同樣比例分割成4*4的小塊,同樣有command控制元件構成,我們可以把預覽區圖片框看作是從遊戲區圖片框中選取的一個部分,遊戲區的小方塊編號和欲覽區編號如下圖: 0 1 2 3 4 5 6 7 8 9 … … … … … … … … … … … … … … … … … … … … 90 91 92 93 94 95 96 97 98 99 3 4 5 6 13 14 15 16 23 24 25 26 33 34 35 36 遊戲區編號 欲覽區編號 利用Select將方塊的7中造型列出,比如長條型的設計,在欲覽區中分別有3.4.5.6和5.15.25.35四個方塊構成兩中形態,用陣列為: m(0) = 3: m(1) = 4: m(2) = 5: m(3) = 6: situation2 = 0 m(0) = 5: m(1) = 15: m(2) = 25: m(3) = 35: situation2 = 1 將它的形狀編號為0和1,在後面方便呼叫,其他的方塊造型同樣的方法。 3.1.3俄羅斯方塊的旋轉 俄羅斯方塊的旋轉主要將方塊的位置加以變換得到的,例如上述範例,長條型有兩中樣式,根據小方塊的編號變動來實現整個造型的旋轉,比如: If n(0) - 18 >= 2 And n(3) + 9 <= 198 Then If cmdfang(n(0) - 18).Visible = False And _ cmdfang(n(1) - 9).Visible = False And _ cmdfang(n(3) + 9).Visible = False Then hidefang 0 n(0) = n(0) - 18 n(1) = n(1) - 9 n(3) = n(3) + 9 showfang 0 situation = 1 End If End If 方塊的造型在旋轉的時候存在一個公式,當然首先要判斷是否滿足旋轉的要求,以上是一個長條型由橫著變成豎立狀態的旋轉,我們以它的造型中的第三個小方塊n(3)為中心旋轉,這樣,在開始運動的時候,長條形要發生旋轉最少要運動到第三行,才能由橫著變成豎立狀態,遊戲區圖形框中第三行的第一個方塊的編號為20,所以長條造型的第一個小方塊的編號n(0)必須要大於20。同樣,長條型方塊在下落到底部的時候也有限制。如果長條下落到最後一行也將無法由橫著變成豎立狀態。 3.1.4如何實現方塊的運動和自動消除滿行的方塊 我們的這個俄羅斯方塊遊戲主要是利用command控制元件的visible屬性完成效果的,其實在遊戲區圖形框可以看成是由許多的command小方塊組成,方塊運動的過程就是造型裡方塊顯示或者隱藏,就像現在的霓虹燈效果一樣,由時鐘控制元件控制visible屬性改變的速度,上一層的消失,下一層的顯示,這樣,從視覺效果可以看到方塊的下落運動效果。 方塊在下落的過程中會自動判斷每一行方塊的visible屬性,如果全部為true時,就會將這一行小方塊的visible屬性全部變成false,在將上面的小方塊向下移動,利用for語句進行迴圈判斷,將所有這樣情況的行改變小方塊visible屬性。當有多行同時出現這樣情況時使用遞迴呼叫,實現連續消行。具體程式程式碼如下: For i = 190 To 10 Step -10 If cmdfang(i).Visible = True And _ cmdfang(i + 1).Visible = True And _ cmdfang(i + 2).Visible = True And _ cmdfang(i + 3).Visible = True And _ cmdfang(i + 4).Visible = True And _ cmdfang(i + 5).Visible = True And _ cmdfang(i + 6).Visible = True And _ cmdfang(i + 7).Visible = True And _ cmdfang(i + 8).Visible = True And _ cmdfang(i + 9).Visible = True Then For j = i + 4 To i Step -1 t = 1 cmdfang(j).Visible = False cmdfang(2 * i + 9 - j).Visible = False For k = 1 To 4000 DoEvents Next t = 0 Next linenum = linenum + 1 For j = i - 1 To 0 Step -1 If cmdfang(j).Visible = True Then cmdfang(j).Visible = False cmdfang(j + 10).Visible = True End If Next clearline '為了實現連消數行,這裡使用遞迴呼叫 End If Next 3.1.5遊戲速度和遊戲級別自由選擇 遊戲速度的自由選擇無非就是改變時鐘控制元件的頻率,我們在選單中添加了選擇速度的功能,還有添加了考驗功能,將欲覽窗中的方塊造型隱藏,給玩家提高了難度,如果你不願意接受考驗也可以點選顯示還原成原來狀態。 遊戲級別的自由選擇是讓使用者選擇遊戲開始時候,遊戲區底部出現一定行數的隨機方塊,同樣給玩家增加了難度,功能程式碼如下: For i = 19 To 20 - Val(txthard.Text) Step -1 For j = i * 10 To i * 10 + 9 If Rnd >= 0.5 Then cmdfang(j).Visible = True Next Next 可以根據你選擇的難度係數在底層的每一行隨機產生超過半數(即5個以上)以上的小方塊,這樣適合喜歡高難度的玩家。 3.1.6遊戲得分的計算和
遊戲選單
的編輯 遊戲得分的計算主要是根據消除的行數來決定的,當然每一次同時消除的行數不一樣,每一行的得分也不一樣,如果你每次消除的行數為1,則最後得分是100分,如果同時消除2行,則最後得分是300分,同時消除3行,得分為700分,同時消除4行,得分為1500分,這由公式:得分 = 原來分數+ 100 * (2 ^ 同時消除的行數-1)。 遊戲的編輯,讀者可以參照下面的功能介紹。 3.2 遊戲功能的介紹 檔案-------開始:開始遊戲。 繼續:繼續遊戲。 暫停:暫時停止遊戲,點選繼續的時候可以繼續遊戲。 退出:退出遊戲。 設定-------選擇遊戲級別。 選擇遊戲速度。 考驗-------顯示:顯示欲覽去方塊。 隱藏:隱藏欲覽去方塊。 幫助-------操作提示以及版本資訊和作者資料。 使用者介面具體如圖: 圖—登陸介面 圖—遊戲介面 圖—選單編輯介面 圖—遊戲幫助介面 有關說明 對於一些技術性比較過硬的玩家,可以調遊戲級別、以及遊戲速度,使得玩家能夠充分的發揮競技遊戲的特色,可以不斷的挑戰自我,挑戰極限。
俄羅斯方塊旋轉演算法:
俄羅斯方塊的旋轉相當於矩陣旋轉。
作者的方法很給力!!!
http://hi.baidu.com/flobert_young/item/346fd87383266946ef1e530f問題:
用用最小空間度將一個M*N的矩陣旋轉90度(順逆時針均可) 

我的解決方法:
如果Src矩陣和Dest矩陣都給的話,那麼就好做了,
這樣我可以使用空間複雜度為O(1)的方法來實現。
方法分為兩個步驟,【這個方法實現的是“順時針旋轉90度”】
1. 首先沿著水平方向的中心軸,上下進行交換;
即:Dest[i][j] = Src[M-i][j],其中0<=i<M/2。
2. 然後沿著左上到右下的對角線實現軸對稱交換;
即:Dest[i][j] = Dest[j][i],其中0<=j<N,j+1<=i<M。最終的位置是Dest[i][j]=Src[j][M-i].第二種方法是先將矩陣轉置,順時針90度就實現列對稱交換,逆時針就實現行對稱交換。第三種方法就是將方塊的每個形狀都列出來.俄羅斯方塊的下落,左右移動檢測碰撞的解決方法:就是轉換後的格子數與本應該的是的格子數判斷是否相等.如果相等,表示可以轉換,不等,就不可以轉換.
原始碼連結:(其中有詳細的程式碼解釋)
歡迎大家吐槽!

相關推薦

VC實現俄羅斯方塊基本功能

遊戲設計思路: 俄羅斯方塊遊戲設計的主要步驟為以下10個方面: (1)遊戲介面的設計。 (2)俄羅斯方塊的造型。 (3)俄羅斯方塊的旋轉。 (4)俄羅斯方塊的運動情況(包括向左,向右和向下)。 (5)俄羅斯方塊的自動消行功能。 (6)遊戲級別的自由選擇。 (7)遊戲速度的自

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

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

一、實現一個特殊的棧,在實現棧的基本功能的基礎上,再實現返回棧中最小元素的操作

empty util run print pri ont com res 字符串 請指教交流! 1 package com.it.hxs.c01; 2 3 import java.util.Stack; 4 5 /* 6 實現一個特殊的棧,在實現棧的基本

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

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

LINUX系統服務器上搭建DHCP服務,實現兩大基本功能:1,自動分配ip;2,手工指定ip

完成 重啟 釋放 p地址 進行 基本功 blog process 自動 在linux系統服務器上搭建DHCP服務,實現兩大基本功能:1,自動分配ip地址;2,手動指定ip地址。首先準備兩臺虛擬機作為實驗對象,一個linux系統作為服務器,一個windows7系統作為客戶機,

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

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

linux下執行連結串列棧(實現棧的基本功能 push,pop,刪除任意結點,遍歷輸出等)

一、簡要敘述設計思想和技術路線(不少於300字)(20分)。 設計思想:利用Linux GNU make C 專案管理軟體工具實現資料結構棧(Stack)。實現Push,Pop,Delete,Search,Visit through,Clear功能。節點的資料設計具有一般性(使用void *da

canvas實現俄羅斯方塊

好久沒使用canvas了,於是通過寫小遊戲“俄羅斯方塊”再次熟悉下canvas,如果有一定的canvas基礎,要實現還是不難的。實際完成的Demo請看:canvas俄羅斯方塊 。 原理詳解 看遊戲最終介面,可知需要實現以下關鍵功能: 遊戲面板,也就是12 * 20的方格,以及是否填充了方塊資訊;

C語言實現俄羅斯方塊

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

【C語言】實現俄羅斯方塊

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

Python:遊戲:300行程式碼實現俄羅斯方塊 Python:遊戲:貪吃蛇 Python:遊戲:掃雷(附原始碼)

本文程式碼基於 python3.6 和 pygame1.9.4。 俄羅斯方塊是兒時最經典的遊戲之一,剛開始接觸 pygame 的時候就想寫一個俄羅斯方塊。但是想到旋轉,停靠,消除等操作,感覺好像很難啊,等真正寫完了發現,一共也就 300 行程式碼,並沒有什麼難的。 先來看一個遊戲截圖,有點醜,好

300行Python程式碼實現俄羅斯方塊,致敬逝去的童年

本文程式碼基於 python3.6 和 pygame1.9.4。 俄羅斯方塊是兒時最經典的遊戲之一,剛開始接觸 pygame 的時候就想寫一個俄羅斯方塊。但是想到旋轉,停靠,消除等操作,感覺好像很難啊,等真正寫完了發現,一共也就 300 行程式碼,並沒有什麼難的。 先來看一個遊戲截圖,有點醜

EasyX實現俄羅斯方塊(加BGM版)

#include<stdio.h>#include<easyx.h> #include<conio.h> #include<Windows.h> #include<time.h> #include<iostr

c語言實現鏈棧基本功能

typedef struct node{ int data; node *next; }Node,*pNode; typedef struct{ pNode top; int count; }LinkStack,*pLinkStack; 注意:(1).首先定義節點結構體

【轉載】88行程式碼實現俄羅斯方塊遊戲(含講解)

#include <windows.h> #include <stdio.h> #include <time.h> #include <conio.h> #include <stdlib.h> char gcTex

Java實現俄羅斯方塊附原始碼

Java實現俄羅斯方塊 軟體的開發過程: 1) 搞清需求,就是軟體的功能描述 俄羅斯方塊的基本規則: 1、一個用於擺放小型正方形的平面虛擬場地,其標準大小: 行寬為10,列高為20,以每個小正方形為單

java實現wc.exe的基本功能

true ade dem new admin buffer eno users close    版權聲明:本文為博主原創文章,轉載請聲明。   今天用java實現了wc.exe的基本功能,感覺還是蠻簡單的,重點是讀取字符串時候,空格也會讀取進去,如果不處理一下的話,空格也

用JS實現俄羅斯方塊

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

WC的基本功能實現.(Java)

編碼 工作 epo 輸入 stage 目前 com 審核 dev 我的GitHub地址:https://github.com/Yuetao1219/lessons WC 項目要求 wc.exe 是一個常見的工具,它能統計文本文件的字符數、單詞數和行數。這個項目要求寫一個命令

c#實現wc基本功能和擴展功能

length lan soft 表格 command 這一 play nal 就會 c#實現wc基本功能和擴展功能 github:鏈接 一、項目要求 wc.exe 是一個常見的工具,它能統計文本文件的字符數、單詞數和行數。這個項目要求寫一個命令行程序,模仿已有wc.exe