python圖形小游戲代碼_手把手制作Python小游戲:俄羅斯方塊(一)

手把手制作Python小游戲:俄羅斯方塊1

bVbEgvZ

大家好,新手第一次寫文章,請多多指教

A.準備工作:

這里我們運用的是Pygame庫,因為Python沒有內置,所以需要下載

如果沒有pygame,可以到官網下載

pygame官網,單擊右邊即可:pygame下載地址鏈接

加下來就可以導入試一試了,這里作者我運用的是

visual-studio-code 因為它有個很方便作者很喜歡的地方:可以自動保存

請這樣設置:bVbDRud

打開之后單擊 文件(F)

在此菜單里再單擊 自動保存 即可

運行程序需要:右鍵,單擊 在終端運行python文件

如何下載VS Code 呢 單擊右邊鏈接:官網

之后在:bVbDRu1

分別搜索:

1.搜索 Chinese 下載第一個插件插件(中文,簡體)

2.搜索 python 下載第一個即可(需要注意的是,建議大家在添加此插件時先下載好Python,作者就是這樣)

3.強烈建議大家更新至最新版,這樣點擊右上角的綠三角行就可以直接運行程序了

bVbDRBq

由于介紹VS Code 的與介紹 Pygame 的網站、論文、筆記等很多,在此我就不過多介紹了,大家可以搜一搜。

接下來步入正題:

bVbEgwB

B.1制作俄羅斯方塊的第一步:

大家可以邊學邊做,不過我當然建議大家可以以章節為單位,看會了,自己編,對大家有好處嘛。

首先導入pygame庫

import pygame

之后可以先運行一次。看一看有沒有報錯,如果沒有,代表庫安裝正確,否則務必要檢查一下是否安裝了、安裝正確了嗎等問題。

沒問題的話,就開始制作俄羅斯方塊小游戲吧:

首先導入一些需要用到的庫(除Pygame,其他都已經內置好了)

import pygame #此庫未內置

import random #此庫已內置

import sys #此庫已內置

import time #此庫已內置

from pygame.locals import * # *代表所有

接下來我們來定義一些變量,在后面會用得上,在此就不過多解釋啦

初始化

FPS = 25

WINDOWWIDTH = 640

WINDOWHEIGTH = 480

BOXSIZE = 20

BOARDWIDTH = 10

BOARDHEIDTH = 20

BLANK = "."

MOVESIDEWAYSFREQ = 0.15

MOVEDOWNFREQ = 0.1

XMARGIN = int((WINDOWWIDTH - (BOARDWIDTH * BOXSIZE))/2)

TOPMARGIN = WINDOWHEIGHT - (BOARDHEIGHT * BOXSIZE) - 5

# 下面是設置一些顏色的RGB

WHITE = (255, 255, 255)

GRAY = (185, 185, 185)

BLACK = (0, 0, 0)

RED = (155, 0, 0)

LIGHTRED = (175, 20, 20)

GREEN = (0, 155, 0)

LIGHTBLUE = (20, 20, 175)

BLUE = (0, 0, 155)

YELLOW = (155, 155, 0)

LIGHTYELLOW = (175, 175, 20)

BORDERCOLOR = BLUE

BGCOLOR = BLACK

TEXTCOLOR = WHITE

TEXTSHADOWCOLOR = GRAY

COLORS = (GLUE, RED, GREEN, YELLOW)

LIGHTCOLORS = (LIGHTGLUE, LIGHTRED, LIGHTGREEN, LIGHTYELLOW)

assert lec(COLORS) == len(LIGHTCOLORS)#每一種顏色必須有對應的亮色

TEMPLATEWIDTH = 5

TEMPLATEHEIGHT = 5

第一部分第一段的代碼到這里結束啦,大家可以自己寫一寫,或者干脆復制粘貼。

我來解析其中的一部分:

1.在上述代碼中,BOXSIZE,BOARDWIDTH,BOARDHEIGH的功能是:建立游戲與屏幕像素點之間的關系。

2.

MOVESIDEWAYSFREQ = 0.15

MOVEDOWNFREQ = 0.1

通過上述兩個變量,每當玩家按下鍵盤中的左移鍵/右移鍵/下移鍵,下降的方塊也會相應的向左/右/下移動一個方塊。而且玩家可以一直按住令其一直移動。

第一個是指每0.15s移動1格(左/右),第二個是指每0.1s移動1格(下)大家在最后可以試著改變一下數據

B.2 第二步:設置形狀

加下來是設置各個圖形的形狀:建議大家復制粘貼,沒啥技術含量

sShapeTemplate = [['.....',

'.....',

'..OO.',

'.OO..',

'.....']

['.....',

'..O..',

'..OO.',

'...O.',

'.....']]

iShapeTemplate = [['..O..',

'..O..',

'..O..',

'..O..',

'.....']

['.....',

'.....',

'OOOO.',

'.....',

'.....']]

zShapeTemplate = [['.....',

'.....',

'.OO..',

'..OO.',

'.....']

['.....',

'..O..',

'.OO..',

'.O...',

'.....']]

oShapeTemplate = [['.....',

'.....',

'.OO..',

'.OO..',

'.....']]

jShapeTemplate = [['.....',

'.O...',

'.OOO.',

'.....',

'.....'],

['.....',

'..OO.',

'..O..',

'..O..',

'.....'],

['.....',

'.....',

'.OOO.',

'...O.',

'.....'],

['.....',

'..O..',

'..O..',

'.OO..',

'.....']]

lShapeTemplate = [['.....',

'...O.',

'.OOO.',

'.....',

'.....'],

['.....',

'..O..',

'..O..',

'..OO.',

'.....'],

['.....',

'.....',

'.OOO.',

'.O...',

'.....'],

['.....',

'.OO..',

'..O..',

'..O..',

'..O..']]

tShapeTemplate = [['.....',

'..O..',

'.OOO.',

'.....',

'.....'],

['.....',

'..O..',

'..OO.',

'..O..',

'.....'],

['.....',

'.....',

'.OOO.',

'..O..',

'.....'],

['.....',

'..O..',

'.OO..',

'..O..',

'.....']]

接下來我來作解釋:

在定義每個方塊時,必須知道每個類型的方塊有幾種“不同”的形狀。在上述代碼當中,列表中嵌有了含有字符串的小列表來構成這個模板。一個所謂的模板包括了一個形狀的所有的變換方式。

B.3 第三步:創建"形狀字典"

我們在這里需要一個字典變量PIECES來存儲所有的不同形狀的所有變化,具體代碼如下:

PIECES = {'S':sShapeTemplate

'I':iShapeTemplate

'Z':zShapeTemplate

'O':oShapeTemplate

'J':jShapeTemplate

'L':lShapeTemplate

'T':tShapeTemplate}

B.4 第四步:編寫主函數

這是重點哦,大家加油

bVbEgx7

主函數main()的作用是創建一些全局變量,并在游戲開始前顯示一個開始畫面,代碼如下:

def main():

global FPSCLOCK, DISPLAYSURF, BASICFONT, BIGFONT

pygame.init()

FPSCLOCK = pygame.time.Clock()

DISPLAYSURF = pygame.display.set_mode((WINDOWWIDTH,WINDOWHEIGHT))

BASICFONT = pygame.font.Font("freesansbold.ttf",18)

BIGFONT = pygame.font.Font("freesansbold.ttf",100)

pygame.display.set_caption("Tetromino")

#showTextScreen("Tetromino")

while True: #Game Loop

#if random.randint(0,1) == 0:

#pygame.mixer.music.looad("tetrisb.mid")

#else:

#pygame.mixer.music.looad("tetrisc.mid")

#pygame.mixer.music.play(-1, 0.0)

runGame()

#pygame.mixer.music.stop()

showTextScreen("Game Over !")

上述代碼中的 runGame() 函數是核心,在循環中首先隨機決定播放那個音樂。之后調用 runGame() 函數運行游戲。當游戲失敗時,runGame() 函數就會返回 main() 函數,這時會停止背景音樂并顯示游戲失敗的畫面。當玩家按下一個鍵時,函數 showTextScreen() 會顯示游戲失敗,游戲循環會再次開始,然后進行下一次游戲。

接下來的內容,均在第二篇

如果你喜歡的話,記得關注我呦

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/259011.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/259011.shtml
英文地址,請注明出處:http://en.pswp.cn/news/259011.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

關于Git使用的一些心得

2019獨角獸企業重金招聘Python工程師標準>>> 本篇稍微記錄下Git使用的一些心得。 對Git的使用,應該是從搭建自己的博客開始的。當時看到開源中國推薦的一篇基于碼云hexo搭建自己博客的文章。所以就花了一天時間鼓搗了下博客。 順帶整理下目前能看到我寫的…

Dlib機器學習庫安裝

昨天使用了一下dlib的人臉檢測功能,效果出奇的好。下面給出dlib整個的安裝過程和使用指導。 下載安裝 我們可以從dlib的官網下載最新的版本,我的是dlib18.18.然后我們需要使用cmake編譯dlib庫和examples示例。 當然前提是你要按照好cmake和opencv。 …

struts2上傳

今天在使用struts2上傳的過程中無意發現,struts2上傳一個文件大小為0字節的文本竟然會報錯FileNotFoundException,嘗試了好久也沒找到答案,最后只能判斷文件的大小后上傳,至于文件字節為0的怎么處理就看各位了 struts2上傳java源碼 1 package com.jzgx.web.action;2 3 import j…

BitSet之為什么用long保存信息

BitSet內部使用long[] words來保存位信息。咋看之下并不理解原因&#xff0c;在解讀set(int bitIndex)之后似乎有了一些領悟。 public void set(int bitIndex) { if (bitIndex < 0) throw new IndexOutOfBoundsException("bitIndex < 0: " bitIndex); //用來計…

ipv4地址是幾位二進制數_幾張思維導圖,讓你清楚的知道ip地址怎么回事?

網絡工程中&#xff0c;ip地址是必須要了解的內容&#xff0c;今天我們用幾張思維導圖來給大家詳細講解IP地址。一、什么是IP地址在生活中我們使用具有上網功能的電子設備都有IP地址&#xff0c;就跟每個人都有自己的名字一樣。IP地址分為IPV4 IPV6&#xff0c;我們所說的的IP地…

《關系營銷2.0——社交網絡時代的營銷之道》一檢查拼寫和語法

本節書摘來異步社區《關系營銷2.0——社交網絡時代的營銷之道》一書中的第2章&#xff0c;作者&#xff1a; 【美】Mari Smith 譯者&#xff1a; 張猛 , 于宏 , 趙俐 責編&#xff1a; 陳冀康, 更多章節內容可以訪問云棲社區“異步社區”公眾號查看。 檢查拼寫和語法 關系營銷2…

dlib人臉檢測功能介紹

本文主要介紹三個點&#xff1a; 1. 如何單獨建立一個工程&#xff0c;使用dlib的人臉檢測功能。 2. 提高人臉檢測率的兩個方法 3. 加速人臉檢測的方法 下面圍繞這幾個點展開敘述。 建人臉檢測工程 1 . 首先我們先使用上期說的examples里的人臉檢測。 我們只要將face_de…

ios網絡開發 網絡狀態檢查

http://www.cnblogs.com/hanjun/archive/2012/12/01/2797622.html 網絡連接中用到的類&#xff1a; 一.Reachability 1.添加 Reachability 的.h和.m文件&#xff0c;再添加SystemConfiguration.framework。 2.Reachability中定義了三種網絡狀態&#xff1a; typedef Num{ NotR…

delphi xe4 ini文件不能讀取的解決方法

今天發現用inifiles下 tinifile.readstring方法突然不能讀數據了&#xff0c;結果把ini文件格式由utf-8改成unicode后就能正常讀取了。轉載于:https://www.cnblogs.com/liqiao/p/3503985.html

《眾妙之門——網頁排版設計制勝秘訣》——3.4 展現品牌視覺的同時保持網頁的可讀性...

本節書摘來自異步社區《眾妙之門——網頁排版設計制勝秘訣》一書中的第3章&#xff0c;第3.4節&#xff0c;作者&#xff1a; 【德】Smashing Magazine 譯者&#xff1a; 侯景艷 , 范辰 更多章節內容可以訪問云棲社區“異步社區”公眾號查看。 3.4 展現品牌視覺的同時保持網頁的…

vs2013創建及使用DLL

這幾天看了許多關于生成Dll的博文&#xff0c;很有感觸&#xff0c;遂整理在此&#xff0c;以供自己后續參考。 VS2013創建DLL 我們使用vs2013來生成Dll&#xff0c;其實使用其他的版本也是同理如此。步驟如下&#xff1a; 單擊“新建項目”&#xff0c;選擇“Win32 項目”&a…

python的作用域分別有幾種_python中作用域與函數嵌套

知識回顧&#xff1a; 拆解傳參。 1.字典傳參。使用** 2.列表傳參。使用* 實際上我們在定義函數的時候&#xff0c;如果省略了星號&#xff0c;那么在調用函數的時候必須要省略星號&#xff0c;除非我們拆解后的參數個數剛好相等。 視頻內容 本節知識視頻教程 文字講解開始&…

這個博客的由來

筆者從事電信行業大型商業智能系統工作多年&#xff0c;日前從事B2C電商網站類數據分析工作&#xff0c;特開設此微博&#xff0c;在發表好文同時&#xff0c;研究網站分析技術。轉載于:https://www.cnblogs.com/sambazhu/p/3508633.html

《Axure RP8 網站和APP原型制作 從入門到精通》一2.7 交付

本節書摘來自異步社區《Axure RP8 網站和APP原型制作 從入門到精通》一書中的第2章&#xff0c;第2.7節&#xff0c;作者 金烏&#xff0c;更多章節內容可以訪問云棲社區“異步社區”公眾號查看 2.7 交付 模型一旦經過批準&#xff0c;我們就可以進入切圖和優化圖像環節了。我…

iOS UISegmentedControl 的使用

當用戶輸入不僅僅是布爾值時&#xff0c;可使用分段控件&#xff08;UISegmentedControl&#xff09;。分段控件提供一欄按鈕&#xff08;有時稱為按鈕欄&#xff09;&#xff0c;但只能激活其中一個按鈕。分段控件會導致用戶在屏幕上看到的內容發生變化。它們常用于在不同類別…

js粘貼板為什么獲取不到圖片信息_【第1829期】復制黏貼上傳圖片和跨瀏覽器自動化測試...

前言這個操作體驗倒是不錯。今日早讀文章由丁香園蔣璇投稿分享。蔣璇, 前端開發攻城獅, 現任職于丁香園. 英語愛好者, 測試驅動開發(TDD)&行為驅動開發(BDD)推崇者. 先專注于 https://github.com/Jiang-Xuan/tuchuang.space 項目的測試驅動開發探索正文從這開始~~在網頁中上…

在C++中調用DLL中的函數

&#xfeff;轉載自&#xff1a;http://blog.sina.com.cn/s/blog_53004b4901009h3b.html   應用程序使用DLL可以采用兩種方式&#xff1a;一種是隱式鏈接&#xff0c;另一種是顯式鏈接。在使用DLL之前首先要知道DLL中函數的結構信息。Visual C6.0&#xff08;或者更先進的版…

CentOS LVS安裝配置

目錄(?)[] 一般2.6.10以上內核版本都已經自帶了ipvsadm,故不需要安裝。 Ipvs 1.25編譯 ipvsadm-1.25編譯不過 去掉netlink庫的依賴&#xff1a;去掉libipvs/Makefile的CFLAGS -DLIBIPVS_USE_NL&#xff0c;去掉Makefile的LIBS -lnl。需要popt庫解析命令行&#xff0c;在這里…

《淘寶網開店 拍攝 修圖 設計 裝修 實戰150招》一一2.7 橫式構圖和豎式構圖...

本節書摘來自異步社區出版社《淘寶網開店 拍攝 修圖 設計 裝修 實戰150招》一書中的第2章&#xff0c;第2.7節&#xff0c;作者&#xff1a; 葛存山&#xff0c;更多章節內容可以訪問云棲社區“異步社區”公眾號查看。 2.7 橫式構圖和豎式構圖 橫幅畫面&#xff0c;即畫面底邊…

Node.js初接觸(一)

本來還在糾結著到底要學哪一種后臺語言呢&#xff0c;突然發現node.js很火&#xff0c;既然能被這么多人推崇&#xff0c;自然是有他的優勢的。去百度百科看了一眼&#xff0c;或許是我理解能力太差&#xff0c;并沒有了解到很多關于node.js的東西&#xff0c;大概就是知道了No…