IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> 自制卡牌游戏Python -> 正文阅读

[游戏开发]自制卡牌游戏Python

这次我会开一个系列,持续更新(也不排除放弃的可能)。

先进行基本的框架搭建

import pygame,sys
canvas=pygame.display.set_mode((1350,680))
pygame.display.set_caption('卡牌')

event=[]
def handleEvent():
    global events
    for e in pygame.event.get():
        if e.type==pygame.QUIT:
            pygame.quit()
            sys.exit()

while True:
    handleEvent()
    pygame.display.update()

接下来,我要创建一个地图,大体参照了最近游戏《邪恶冥刻》的形式:

?我总结了一下它的逻辑:

?既然它有这么多方面。那我们肯定会按其中一方面生成并在同时满足其他方面:这里我选择依照层级方面生成:

稍等,我实在是对我的代码水平不自信,咱们还是先做出显示函数吧。
def mapDisplay():
    while True:
        handleEvent()

        canvas.blit(mapImg[0],(0,0))

        canvas.blit(mapImg[1],(0,0))

        pygame.display.update()

mapDisplay()

现在可以开始一边编写算法一边完善显示了:

#记得引入random库并以r使用
def create_map(mapLength):
    global mapNotes
    notes_events=['card','printer','hospital','magic_stone','fight']

    mapNotes=[]
    for i in range(mapLength):
        if i==0:
            mapNotes.append(['card'])
        elif i==mapLength-1:
            mapNotes.append(['boss_fight'])
        else:
            tempL=[]
            for i in range(r.randint(1,4)):
                tempL.append(notes_events[r.randint(0,len(notes_events)-1)])
            mapNotes.append(tempL)
def mapDisplay():
    print(mapNotes)
    while True:
        handleEvent()

        canvas.blit(mapImg[0],(0,0))

        canvas.blit(mapImg[1],(0,0))

        pygame.display.update()

我们现在能生成符合要求的节点了,来开始生成连线吧!

先说一下逻辑:看看我们的示意图:

?是不是可以以一个 起点*终点 大小,1表示连接,0表示断开的矩阵表示?例如第二排到第三排

? ? ?1? ? 2? ? 3? ? 4? ? ? ? 第三至第四? ? 1? ? 1? ? 1? ? 1

1? ?1? ? 0? ? 0? ? 0

2? ?0? ? 1? ? 1? ? 1

我们发现了规律:每一行每一列至少但不限于1条连接,现在我们可以开始了:

#注意导入numpy库并以np调用
def create_map(mapLength):
    global mapNotes,mapWires
    #节点生成
    notes_events=['card','printer','hospital','magic_stone','fight']

    mapNotes=[]
    for i in range(mapLength):
        if i==0:
            mapNotes.append(['card'])
        elif i==mapLength-1:
            mapNotes.append(['boss_fight'])
        else:
            tempL=[]
            for i in range(r.randint(1,4)):
                tempL.append(notes_events[r.randint(0,len(notes_events)-1)])
            mapNotes.append(tempL)
    
    #连线生成
    mapWires=[]
    for i in range(mapLength-1):
        tempArray=np.zeros((len(mapNotes[i]),len(mapNotes[i+1])))

        for j in range(len(mapNotes[i])):
            tempArray[j,r.randint(0,len(mapNotes[i+1])-1)]=1
        for k in range(len(mapNotes[i+1])):
            tempArray[r.randint(0,len(mapNotes[i])-1),k]=1

        mapWires.append(tempArray)

def mapDisplay():
    print(mapNotes)
    for i in range(4):
        print(mapWires[i])
    while True:
        handleEvent()

        canvas.blit(mapImg[0],(0,0))

        canvas.blit(mapImg[1],(0,0))

        pygame.display.update()

这是我的其中一次运行结果:

[['card'], ['printer', 'hospital', 'card', 'card']
, ['magic_stone', 'hospital', 'printer'], ['hospital', 'hospital'], ['boss_fight']]
[[1. 1. 1. 1.]]
[[0. 1. 1.]    
 [0. 1. 1.]    
 [1. 0. 1.]    
 [1. 0. 0.]]   
[[1. 1.]       
 [0. 1.]       
 [1. 1.]]      
[[1.]
 [1.]]

我手绘了一下以展示:

?有点乱,但我满足了。让我们添加显示系统吧。

import pygame,sys,random as r,numpy as np
canvas=pygame.display.set_mode((1350,680))
pygame.display.set_caption('卡牌')

#加载图片
mapImg={0:pygame.image.load('images/map(layer0).png'),\
    1:pygame.image.load('images/map(layer1).png')}
noteImg={'card':pygame.image.load('images/notes_events/card.png'),\
    'printer':pygame.image.load('images/notes_events/printer.png'),\
        'hospital':pygame.image.load('images/notes_events/hospital.png'),\
            'magic_stone':pygame.image.load('images/notes_events/magic_stone.png'),\
                'fight':pygame.image.load('images/notes_events/fight.png'),\
                    'boss_fight':pygame.image.load('images/notes_events/boss.png')}

#触发事件
event=[]
def handleEvent():
    global events
    for e in pygame.event.get():
        if e.type==pygame.QUIT:
            pygame.quit()
            sys.exit()

def create_map(mapLength):
    global mapNotes,mapWires
    #节点生成
    notes_events=['card','printer','hospital','magic_stone','fight']

    mapNotes=[]
    for i in range(mapLength):
        if i==0:
            mapNotes.append(['card'])
        elif i==mapLength-1:
            mapNotes.append(['boss_fight'])
        else:
            tempL=[]
            for i in range(r.randint(1,4)):
                tempL.append(notes_events[r.randint(0,len(notes_events)-1)])
            mapNotes.append(tempL)
    
    #连线生成
    mapWires=[]
    for i in range(mapLength-1):
        tempArray=np.zeros((len(mapNotes[i]),len(mapNotes[i+1])))

        for j in range(len(mapNotes[i])):
            tempArray[j,r.randint(0,len(mapNotes[i+1])-1)]=1
        for k in range(len(mapNotes[i+1])):
            tempArray[r.randint(0,len(mapNotes[i])-1),k]=1

        mapWires.append(tempArray)

noteDisplayPos={1:{0:316},2:{0:188,1:408},3:{0:150,1:280,2:400},4:{0:120,1:270,2:340,3:510}}
def mapDisplay():
    print(mapNotes)
    for i in range(4):
        print(mapWires[i])
    
    playerLayer=0
    while True:
        handleEvent()

        canvas.blit(mapImg[0],(0,0))
        for i in range(len(mapNotes)):
            for j in range(len(mapNotes[i])):
                canvas.blit(noteImg[mapNotes[i][j]],((i-playerLayer)*200+250,noteDisplayPos[len(mapNotes[i])][j]))
        
        for i in range(len(mapWires)):
            wires=mapWires[i]
            for a in range(wires.shape[0]):
                for b in range(wires.shape[1]):
                    if wires[a,b]==1:
                        pygame.draw.line(canvas,(10,10,10),\
                            ((i-playerLayer)*200+250+70,noteDisplayPos[len(mapNotes[i])][a]+32),\
                                ((i+1-playerLayer)*200+250-6,noteDisplayPos[len(mapNotes[i+1])][b]+32),4)
        canvas.blit(mapImg[1],(0,0))

        pygame.display.update()

create_map(7)
mapDisplay()

现在地图系统暂时告一段落,让我们去编写战斗吧。

(15条消息) images.rarrrrrrrrrrrrrrr-其他文档类资源-CSDN文库

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章           查看所有文章
加:2021-11-30 15:56:52  更:2021-11-30 15:58:33 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 23:42:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码