校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > 用Python簡陋模擬n階魔方

用Python簡陋模擬n階魔方

熱門標簽:電話外呼系統招商代理 京華圖書館地圖標注 佛山通用400電話申請 淮安呼叫中心外呼系統如何 看懂地圖標注方法 廣東旅游地圖標注 蘇州人工外呼系統軟件 電話機器人貸款詐騙 打印谷歌地圖標注

一、前言

終于整完了畢業論文,忙里偷閑半小時摸了個魔方模擬程序,支持模擬任意階魔方,自動打亂,輸入指令旋轉。顯示方面不會弄3D的,用opencv整了個展開圖。

二、效果

五階魔方打亂20步

震撼人心50階,打亂100步

三、代碼

import cv2
import numpy as np
from random import randint


class Cube:
    def __init__(self, order=3, size=50):  # 魔方階數、顯示尺寸
        self.img = np.zeros((4 * size * order, 3 * size * order, 3), dtype=np.uint8)
        self.order = order
        self.size = size
        self.len = size * order
        self.top = [['y'] * order for _ in range(order)]
        self.front = [['r'] * order for _ in range(order)]
        self.left = [['b'] * order for _ in range(order)]
        self.right = [['g'] * order for _ in range(order)]
        self.back = [['o'] * order for _ in range(order)]
        self.bottom = [['w'] * order for _ in range(order)]
        self.axis_rotate = (self.base_rotate_x, self.base_rotate_y, self.base_rotate_z)
        self.color = {'y': (0, 255, 255), 'r': (0, 0, 255), 'b': (255, 0, 0),
                      'g': (0, 255, 0), 'o': (0, 128, 255), 'w': (255, 255, 255)}

    def check(self):  # 檢測魔方是否還原
        for i in range(self.order):
            for j in range(self.order):
                if self.top[i][j] != self.top[0][0]:
                    return False
                if self.back[i][j] != self.back[0][0]:
                    return False
                if self.front[i][j] != self.front[0][0]:
                    return False
                if self.left[i][j] != self.left[0][0]:
                    return False
                if self.right[i][j] != self.right[0][0]:
                    return False
                if self.bottom[i][j] != self.bottom[0][0]:
                    return False
        return True

    def show(self, wait=0):  # 顯示魔方展開圖
        for i in range(self.order):
            for j in range(self.order):
                # back
                x, y = self.len + i * self.size, j * self.size
                cv2.rectangle(self.img, (x, y), (x + self.size, y + self.size), self.color[self.back[j][i]], -1)
                cv2.rectangle(self.img, (x, y), (x + self.size, y + self.size), (10, 10, 10), 1)
                # left
                x, y = i * self.size, self.len + j * self.size
                cv2.rectangle(self.img, (x, y), (x + self.size, y + self.size), self.color[self.left[j][i]], -1)
                cv2.rectangle(self.img, (x, y), (x + self.size, y + self.size), (10, 10, 10), 1)
                # top
                x, y = self.len + i * self.size, self.len + j * self.size
                cv2.rectangle(self.img, (x, y), (x + self.size, y + self.size), self.color[self.top[j][i]], -1)
                cv2.rectangle(self.img, (x, y), (x + self.size, y + self.size), (10, 10, 10), 1)
                # right
                x, y = 2 * self.len + i * self.size, self.len + j * self.size
                cv2.rectangle(self.img, (x, y), (x + self.size, y + self.size), self.color[self.right[j][i]], -1)
                cv2.rectangle(self.img, (x, y), (x + self.size, y + self.size), (10, 10, 10), 1)
                # front
                x, y = self.len + i * self.size, 2 * self.len + j * self.size
                cv2.rectangle(self.img, (x, y), (x + self.size, y + self.size), self.color[self.front[j][i]], -1)
                cv2.rectangle(self.img, (x, y), (x + self.size, y + self.size), (10, 10, 10), 1)
                # bottom
                x, y = self.len + i * self.size, 3 * self.len + j * self.size
                cv2.rectangle(self.img, (x, y), (x + self.size, y + self.size), self.color[self.bottom[j][i]], -1)
                cv2.rectangle(self.img, (x, y), (x + self.size, y + self.size), (10, 10, 10), 1)
        cv2.imshow('cube', self.img)
        cv2.waitKey(wait)

    def shuffle(self, times):  # 打亂魔方
        for _ in range(times):
            self.rotate(randint(0, 2), randint(0, self.order - 1), randint(0, 3))

    def rotate(self, axis, index, times):  # 旋轉魔方:axis軸,第index層,逆時針times次
        for _ in range(times):
            self.axis_rotate[axis](index)

    def count(self, color='y'):
        count = 0
        for i in range(self.order):
            for j in range(self.order):
                if self.top[i][j] == color:
                    count += 1
        return count

    @staticmethod
    def _column_trans(surface, index, col):
        for i, r in enumerate(surface):
            r[index] = col[i]

    def base_rotate_x(self, index):
        if index == 0:
            self.left = [list(c) for c in zip(*self.left)][::-1]
        elif index == self.order - 1:
            self.right = [list(c)[::-1] for c in zip(*self.right)]
        temp = [r[index] for r in self.top]
        self._column_trans(self.top, index, [r[index] for r in self.front])
        self._column_trans(self.front, index, [r[index] for r in self.bottom])
        self._column_trans(self.bottom, index, [r[index] for r in self.back])
        self._column_trans(self.back, index, temp)

    def base_rotate_y(self, index):
        if index == 0:
            self.back = [list(c)[::-1] for c in zip(*self.back)]
        elif index == self.order - 1:
            self.front = [list(c) for c in zip(*self.front)][::-1]
        temp = self.left[index][::-1]
        self.left[index] = self.top[index]
        self.top[index] = self.right[index]
        self.right[index] = self.bottom[self.order - index - 1][::-1]
        self.bottom[self.order - index - 1] = temp

    def base_rotate_z(self, index):
        if index == 0:
            self.top = [list(c) for c in zip(*self.top)][::-1]
        elif index == self.order - 1:
            self.bottom = [list(c)[::-1] for c in zip(*self.bottom)]
        temp = self.front[index][::-1]
        self.front[index] = [r[self.order - index - 1] for r in self.left]
        self._column_trans(self.left, self.order - index - 1, self.back[self.order - index - 1][::-1])
        self.back[self.order - index - 1] = [r[index] for r in self.right]
        self._column_trans(self.right, index, temp)


cube = Cube(3, 50)
cube.shuffle(100)
while True:
    cube.show(1)
    cube.rotate(*(int(c) for c in input('axis,index,times:').split()))
    if cube.check():
        break
print('Congratulations')
cube.show(0)

到此這篇關于用Python簡陋模擬n階魔方的文章就介紹到這了,更多相關pytho模擬魔方內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • python實現三階魔方還原的示例代碼

標簽:畢節 中山 駐馬店 股票 江蘇 衡水 呼和浩特 湖州

巨人網絡通訊聲明:本文標題《用Python簡陋模擬n階魔方》,本文關鍵詞  用,Python,簡陋,模擬,階,魔方,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《用Python簡陋模擬n階魔方》相關的同類信息!
  • 本頁收集關于用Python簡陋模擬n階魔方的相關信息資訊供網民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    亚洲1区2区3区视频| 久久一区二区三区四区| 一区二区三区**美女毛片| 99久久伊人网影院| 亚洲欧美日韩国产中文在线| 91亚洲男人天堂| 亚洲综合一二三区| 在线成人午夜影院| 经典三级在线一区| 欧美国产97人人爽人人喊| 91污在线观看| 香蕉av福利精品导航| 欧美成人伊人久久综合网| 国产一区视频网站| 亚洲欧美乱综合| 欧美精品久久天天躁| 精品一区二区久久| 中文字幕在线观看一区二区| 色婷婷综合五月| 麻豆精品新av中文字幕| 国产亚洲精品福利| 欧美调教femdomvk| 国产精品综合av一区二区国产馆| 国产精品美女久久久久久久| 欧美在线免费播放| 精品一区二区三区免费播放| 中文字幕一区二区三区av| 欧美美女网站色| 国产成人激情av| 午夜视频一区二区三区| 国产亚洲欧美激情| 欧美乱妇一区二区三区不卡视频| 国产成人自拍网| 亚欧色一区w666天堂| 久久久久九九视频| 欧美欧美欧美欧美首页| 粉嫩高潮美女一区二区三区| 日韩精品免费视频人成| 1区2区3区欧美| 精品国产乱码久久久久久久久| 色综合天天狠狠| 精品一区二区三区的国产在线播放| 亚洲精品一二三区| 国产欧美一区二区三区在线老狼| 欧美日韩你懂得| 99久久精品国产一区| 狠狠色狠狠色综合日日91app| 亚洲一二三级电影| 国产精品二区一区二区aⅴ污介绍| 日韩午夜精品电影| 欧美日韩在线免费视频| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 国产成人av一区二区三区在线观看| 久久久久久久久久久久电影| 欧美日韩你懂的| 色综合色狠狠综合色| 丁香另类激情小说| 韩国女主播成人在线观看| 日韩av电影免费观看高清完整版 | 亚洲精品免费电影| 国产精品福利电影一区二区三区四区 | 日本伊人精品一区二区三区观看方式| 久久这里只有精品首页| 欧美美女一区二区三区| 在线观看不卡一区| 色综合久久综合网欧美综合网 | 欧美一级在线免费| 欧美日韩夫妻久久| 欧美日本一区二区在线观看| 欧美午夜精品久久久久久超碰 | 在线不卡一区二区| 欧美日韩国产一二三| 色噜噜狠狠色综合中国| 99久久久免费精品国产一区二区| 成人v精品蜜桃久久一区| 国产传媒欧美日韩成人| 成人美女视频在线看| 北岛玲一区二区三区四区| 高清成人免费视频| 99久久精品情趣| 91丨porny丨国产| 色婷婷激情综合| 欧美日韩第一区日日骚| 91精品国产免费| 精品欧美久久久| 国产欧美一区二区三区鸳鸯浴| 中文字幕乱码久久午夜不卡| 亚洲视频狠狠干| 天天综合日日夜夜精品| 免费黄网站欧美| 国产九色sp调教91| 99国产精品久久久久久久久久久 | 日韩欧美一区二区久久婷婷| 欧美成人性福生活免费看| 久久亚洲私人国产精品va媚药| 国产日产精品1区| 亚洲图片激情小说| 亚洲线精品一区二区三区| 青娱乐精品视频在线| 国产一区二区视频在线| 成人av在线资源网站| 91久久精品日日躁夜夜躁欧美| 欧美日韩mp4| 国产色91在线| 亚洲午夜在线视频| 久草这里只有精品视频| 高清国产一区二区| 欧美日韩一级黄| 国产亚洲成年网址在线观看| 日韩毛片视频在线看| 青青草国产精品97视觉盛宴| 国产ts人妖一区二区| 在线视频国产一区| 日韩天堂在线观看| 国产精品护士白丝一区av| 亚洲一区二区三区四区五区中文 | 裸体歌舞表演一区二区| 成人午夜电影网站| 欧美日韩国产综合草草| 国产拍揄自揄精品视频麻豆| 亚洲国产视频一区| 成人丝袜18视频在线观看| 91国产精品成人| 久久久久国产一区二区三区四区| 亚洲免费三区一区二区| 久久99精品国产麻豆不卡| 99re亚洲国产精品| 久久久五月婷婷| 亚洲成av人片一区二区| 成人激情免费网站| 欧美一区二区黄色| 亚洲欧美乱综合| 国产精品一级二级三级| 在线不卡免费av| 亚洲欧美一区二区三区极速播放 | 色噜噜久久综合| 欧美国产成人精品| 免费久久精品视频| 欧美自拍偷拍午夜视频| 日本一区二区三区dvd视频在线| 亚洲va韩国va欧美va精品| a级精品国产片在线观看| 日韩欧美国产综合一区| 亚洲一区在线视频| 91在线高清观看| 国产精品美女久久久久久| 九九**精品视频免费播放| 欧美日韩精品是欧美日韩精品| 中文字幕一区在线观看| 国产91丝袜在线播放0| 欧美tk丨vk视频| 日韩高清在线观看| 欧美日韩一区二区在线观看| 18涩涩午夜精品.www| 成人一区在线观看| 国产欧美一区二区精品久导航 | ww亚洲ww在线观看国产| 麻豆91免费看| 日韩一区二区三区观看| 天堂va蜜桃一区二区三区| 欧美在线999| 一区二区三区欧美久久| 91蜜桃网址入口| 亚洲精品第1页| 在线观看网站黄不卡| 亚洲一区二区三区四区在线观看 | 99re这里都是精品| 国产精品久久久久久久久免费桃花 | 色欧美日韩亚洲| 国产精品国产三级国产普通话蜜臀| 久久99国内精品| 久久综合久色欧美综合狠狠| 久久99精品网久久| 国产午夜精品一区二区三区四区| 久久电影网站中文字幕 | 高清不卡一区二区在线| 国产日韩欧美综合一区| 成人高清av在线| 亚洲免费色视频| 欧美性大战久久久久久久| 亚洲电影激情视频网站| 欧美一级生活片| 国产一区二区三区免费看| 欧美激情一区不卡| 色一情一乱一乱一91av| 亚洲超丰满肉感bbw| 日韩网站在线看片你懂的| 久久99久久久久久久久久久| 精品国产一区二区三区四区四| 国产尤物一区二区| 国产精品美女久久久久高潮| 91蝌蚪porny| 视频一区在线播放| 久久久欧美精品sm网站| 成人99免费视频| 丝袜诱惑制服诱惑色一区在线观看 | 久久精品久久综合| 久久久久国产成人精品亚洲午夜| 国产成人综合在线观看| 一区二区三区欧美日|