国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

基于FPGA(basys3)的雙人對戰(zhàn)人機對戰(zhàn)五子棋(vivado)課程設(shè)計項目

這篇具有很好參考價值的文章主要介紹了基于FPGA(basys3)的雙人對戰(zhàn)人機對戰(zhàn)五子棋(vivado)課程設(shè)計項目。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

主界面顯示與選擇模式

雙人對戰(zhàn)

人機對戰(zhàn)

勝利界面顯示

部分源碼


主界面顯示與選擇模式

VGA顯示器顯示圖片,顯示圖片利用Block Memory Generator將圖片像素點儲存在RAM里面。

效果圖:(防止侵權(quán)打了馬賽克)

開發(fā)板五子棋,fpga開發(fā)

?通過開發(fā)板上的按鍵進行模式選擇,模式確定

雙人對戰(zhàn)

雙人對戰(zhàn)就是采用簡單的存數(shù)組的辦法,這里五子棋的棋盤是采用13*13的大小,為了方便輸贏判斷也為了方便后續(xù)人機模式得分判斷,這里數(shù)組采用了21*21大小的數(shù)組。

效果圖:

開發(fā)板五子棋,fpga開發(fā)

?在數(shù)組中黑子數(shù)值為1,白子為2,空白為0,簡單的原理就是黑子下完白子下,兩個玩家共用一個鍵盤,每當(dāng)一個玩家落子后就會進行輸贏判斷,對數(shù)組21*21中13*13的區(qū)域每一個點進行判斷

如下圖:(判斷以這個點為中心的橫豎斜方向是否都為1或者都為2)

開發(fā)板五子棋,fpga開發(fā)

人機對戰(zhàn)

該程序采用了局部區(qū)域計算得分的方法來實現(xiàn)人機下棋操作

效果圖:(采用了和雙人對戰(zhàn)一樣的頁面)

開發(fā)板五子棋,fpga開發(fā)

?當(dāng)玩家(黑子)下完后人機根據(jù)當(dāng)前棋局進行下棋(沒有加延時所以是秒下),并且在最后一次下的白子中心還有一個黑點方便玩家知道人機下哪了。

我原本想用剪枝算法來制作人機的,但是我發(fā)現(xiàn)我寫完程序后發(fā)現(xiàn)我的basys3開發(fā)板的LUT不能支持我的算法,還有會超出循環(huán)上限的問題(當(dāng)然還有我自身算法能力不夠),最后我重寫了一個簡單的算法,經(jīng)過不斷優(yōu)化,最終實現(xiàn)了一個簡單的人機對戰(zhàn)。

具體算法:

我創(chuàng)建了一個新變量(二進制8位,因為開發(fā)板資源有限,所以越簡單越好)用來存儲得分信息,對每一個空白點進行分數(shù)計算,對以每一個空白點為中心的9*9區(qū)域進行了條件判斷(這是我之前為什么存21*21的數(shù)組的原因,因為邊界上的空白的話左邊本來是沒有數(shù)組的,進行判斷就會出現(xiàn)錯誤,所以我直接省略了邊界條件的判斷,讓它在一定意義上沒有邊界,但是這也會造成一定的問題,例如情況:邊界,0,2,2,2,1,在這種情況下已經(jīng)不可能連成五個子了,但是它還是會判斷這是一個得分比較高的解)

得分計算:

開發(fā)板五子棋,fpga開發(fā)開發(fā)板五子棋,fpga開發(fā)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖1? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖2

先對中間空白點賦值,先賦為2(白色),然后對其進行是否連成五子判斷(如上圖1所示),如果能連成五子就將其得分的最高位(位7)賦為1,對其進行是否連成四子判斷(如上圖2所示),如果能連成四子就將其得分(位5)賦為1,對其進行是否連成三子判斷(如下圖3所示),如果能連成三子就將其得分(位3)賦為1,對其進行是否連成二子判斷(如下圖4所示),如果能連成二子就將其得分(位1)賦為1,其他豎和斜方向也是一樣的道理。

?開發(fā)板五子棋,fpga開發(fā)開發(fā)板五子棋,fpga開發(fā)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖3? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖4

?然后將這個空白點賦為1(黑色),然后對其進行是否連成五子判斷,如果能連成五子就將其得分(位6)賦為1,對其進行是否連成四子判斷,如果能連成四子就將其得分(位4)賦為1,對其進行是否連成三子判斷,如果能連成三子就將其得分(位2)賦為1,對其進行是否連成二子判斷,如果能連成二子就將其得分(位0)賦為1,其他豎和斜方向也是一樣的道理。

還有一些特殊情況的判斷賦值為了提高人機的博弈力,這里不說明了。

?最后找到那個得分最高的空白點就行了。

勝利界面顯示

開發(fā)板五子棋,fpga開發(fā)

?最后也有選擇按鈕用來控制是當(dāng)前模式的直接下一局還是返回主頁面進行重新選擇。

在VGA顯示中還采用了取字模延時的方法顯示字和一些有趣的動圖

比如抽象的坤坤打球動圖,豌豆射手和向日葵。

開發(fā)板五子棋,fpga開發(fā)開發(fā)板五子棋,fpga開發(fā)開發(fā)板五子棋,fpga開發(fā)文章來源地址http://www.zghlxwxcb.cn/news/detail-801088.html

部分源碼

score=0;
maxa=0;maxb=0;
for(a=0;a<13;a=a+1)
	begin
      for(b=0;b<13;b=b+1)
        begin
          if(if_have_2[a+4][b+4]==0)
             begin
                score1=0;
                if_have_2[a+4][b+4]=2;
                for(q=0;q<5;q=q+1)
                   begin
                     if(if_have_2[a+q][b+4]==2
                        &&if_have_2[a+1+q][b+4]==2
                        &&if_have_2[a+2+q][b+4]==2
                        &&if_have_2[a+3+q][b+4]==2
                        &&if_have_2[a+4+q][b+4]==2)
                          begin
                           score1[7]=1;
                          end
                     else
                         begin
                         end
                     if(if_have_2[a+4][b+q]==2
                        &&if_have_2[a+4][b+1+q]==2
                        &&if_have_2[a+4][b+2+q]==2
                        &&if_have_2[a+4][b+3+q]==2
                        &&if_have_2[a+4][b+4+q]==2)
                      begin
                        score1[7]=1;
                      end
                     else
                      begin
                      end
                     if(if_have_2[a+q][b+q]==2
                        &&if_have_2[a+1+q][b+1+q]==2
                        &&if_have_2[a+2+q][b+2+q]==2
                        &&if_have_2[a+3+q][b+3+q]==2
                        &&if_have_2[a+4+q][b+4+q]==2)
                      begin
                        score1[7]=1;
                      end
                     else
                      begin
                      end
                     if(if_have_2[a+4-q][b+4+q]==2
                        &&if_have_2[a+5-q][b+3+q]==2
                        &&if_have_2[a+6-q][b+2+q]==2
                        &&if_have_2[a+7-q][b+1+q]==2
                        &&if_have_2[a+8-q][b+q]==2)
                      begin
                        score1[7]=1;
                      end
                      else
                      begin
                      end
                      end
                    for(q=0;q<4;q=q+1)
                       begin
                        if(if_have_2[a+1+q][b+4]==2
                          &&if_have_2[a+2+q][b+4]==2
                          &&if_have_2[a+3+q][b+4]==2
                          &&if_have_2[a+4+q][b+4]==2)
                       begin
                          score1[5]=1;
                       end
                       else
                          begin
                          end
                       if(if_have_2[a+4][b+1+q]==2
                          &&if_have_2[a+4][b+2+q]==2
                          &&if_have_2[a+4][b+3+q]==2
                          &&if_have_2[a+4][b+4+q]==2)
                           begin
                          score1[5]=1;
                            end
                        else
                           begin
                           end
                         if(if_have_2[a+1+q][b+1+q]==2
                            &&if_have_2[a+2+q][b+2+q]==2
                            &&if_have_2[a+3+q][b+3+q]==2
                            &&if_have_2[a+4+q][b+4+q]==2)
                           begin
                            score1[5]=1;
                           end
                          else
                           begin
                           end
                         if(if_have_2[a+4-q][b+4+q]==2
                            &&if_have_2[a+5-q][b+3+q]==2
                            &&if_have_2[a+6-q][b+2+q]==2
                            &&if_have_2[a+7-q][b+1+q]==2)
                           begin
                           score1[5]=1;
                           end
                         else
                           begin
                           end
                         end
                      for(q=0;q<3;q=q+1)
                         begin
                           if(if_have_2[a+2+q][b+4]==2
                              &&if_have_2[a+3+q][b+4]==2
                              &&if_have_2[a+4+q][b+4]==2)
                           begin
                              score1[3]=1;
                           end
                          else
                              begin
                              end
                         if(if_have_2[a+4][b+2+q]==2
                            &&if_have_2[a+4][b+3+q]==2
                            &&if_have_2[a+4][b+4+q]==2)
                            begin
                             score1[3]=1;
                            end
                          else
                            begin
                            end
...

到了這里,關(guān)于基于FPGA(basys3)的雙人對戰(zhàn)人機對戰(zhàn)五子棋(vivado)課程設(shè)計項目的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 微信小程序項目實例——雙人五子棋

    微信小程序項目實例——雙人五子棋

    項目代碼見文字底部,點贊關(guān)注有驚喜 微信小程序項目實例——雙人五子棋 雙人五子棋是一款游戲小程序 兩位選手可以在15x15的棋盤上 進行五子棋競技 同時小程序設(shè)置了悔棋功能 點擊落子 判斷勝負 勝利效果 重新開始 悔棋 具體的介紹就到這里了 有興趣的同學(xué)可以繼續(xù)研

    2024年02月12日
    瀏覽(19)
  • 在線五子棋對戰(zhàn)

    在線五子棋對戰(zhàn)

    目錄 ? 數(shù)據(jù)管理模塊(數(shù)據(jù)庫設(shè)計) 前端界面模塊 業(yè)務(wù)處理模塊 會話管理模塊網(wǎng)絡(luò)通信模塊(session,cookie) 在線管理模塊 房間管理模塊 用戶匹配模塊 項目擴展 數(shù)據(jù)庫中有可能存在很多張表,每張表中管理的數(shù)據(jù)?有不同,要進?的數(shù)據(jù)操作也各不相同,因此我們可以為每?

    2024年02月14日
    瀏覽(18)
  • Unity 簡單聯(lián)網(wǎng)游戲(雙人五子棋)開發(fā)(二)

    Unity 簡單聯(lián)網(wǎng)游戲(雙人五子棋)開發(fā)(二)

    前言:之前我們嘗試開發(fā)了一個兩個比拼分數(shù)的不像游戲的超簡單的弱數(shù)據(jù)聯(lián)網(wǎng)游戲,主要是想讓一些沒開發(fā)過聯(lián)網(wǎng)游戲的人了解一下最基礎(chǔ)的流程;不過有人仍然有人私信我表示看不懂,所以這次我們再開發(fā)一個類似的游戲,為了這個項目更像是一個游戲,而不是不像游戲

    2024年02月08日
    瀏覽(27)
  • C++ 實現(xiàn)對戰(zhàn)AI五子棋

    C++ 實現(xiàn)對戰(zhàn)AI五子棋

    ?個人主頁: 日刷百題 系列專欄 : 〖C/C++小游戲〗 〖Linux〗 〖數(shù)據(jù)結(jié)構(gòu)〗 ? 〖 C語言 〗 ?? 歡迎各位 → 點贊 ??+ 收藏 ??+ 留言 ??? ? ? ? ? ?為了能夠快速上手一門語言,我們往往在學(xué)習(xí)了基本語法后,采用寫一個小項目的方式來加深理解語言的語法及運用,本文采

    2024年02月03日
    瀏覽(25)
  • 【項目設(shè)計】網(wǎng)絡(luò)對戰(zhàn)五子棋(上)

    【項目設(shè)計】網(wǎng)絡(luò)對戰(zhàn)五子棋(上)

    想回家過年… 1.1 http1.0/1.1和websocket協(xié)議 1. a. http協(xié)議在Linux的學(xué)習(xí)部分我們就已經(jīng)學(xué)習(xí)過了,當(dāng)時http和https是一塊學(xué)的,我們當(dāng)時其實已經(jīng)了解了http的大部分知識內(nèi)容,比如http請求和響應(yīng)的格式,各自的報頭字段都有哪些,cookie和session機制,http1.1的長連接策略keep-alive,還有

    2024年02月07日
    瀏覽(21)
  • C++項目:在線五子棋對戰(zhàn)網(wǎng)頁版--匹配對戰(zhàn)模塊開發(fā)

    玩家匹配是根據(jù)自己的天梯分數(shù)進行匹配的,而服務(wù)器中將玩家天梯分數(shù)分為三個檔次: 1. 普通:天梯分數(shù)小于2000分 2. 高手:天梯分數(shù)介于2000~3000分之間 3. 大神:天梯分數(shù)大于3000分 當(dāng)玩家進行對戰(zhàn)匹配時,服務(wù)器會根據(jù)檔次,將玩家送到不同檔次的匹配隊列當(dāng)中。共有

    2024年02月13日
    瀏覽(20)
  • C++項目:網(wǎng)絡(luò)版本在線五子棋對戰(zhàn)

    C++項目:網(wǎng)絡(luò)版本在線五子棋對戰(zhàn)

    目錄 1.項目介紹 2.開發(fā)環(huán)境 3.核心技術(shù) 4. 環(huán)境搭建 5.websocketpp 5.1原理解析 5.2報文格式? 5.3websocketpp常用接口介紹 5.4websocket服務(wù)器 6.JsonCpp使用 6.1Json數(shù)據(jù)格式 6.2JsonCpp介紹 7.MySQL API 7.1MySQL API介紹 7.2MySQL API使用 7.3實現(xiàn)增刪改查操作 8.項目結(jié)構(gòu)設(shè)計 8.1項目模塊劃分說明 8.2業(yè)務(wù)處

    2024年02月10日
    瀏覽(29)
  • Linux項目實戰(zhàn)——五子棋(單機人人對戰(zhàn)版)

    Linux項目實戰(zhàn)——五子棋(單機人人對戰(zhàn)版)

    Linux操作系統(tǒng)項目實戰(zhàn)——五子棋 GIF: 目錄 ? ? ? ? ???Linux操作系統(tǒng)項目——五子棋 一、問題導(dǎo)引: 二、實現(xiàn)要求: 三、五子棋原理: 1.落子數(shù)據(jù)信息保存載體: 2.落子思路: 3.判斷“五子連珠” 四、項目實現(xiàn)步驟: Ⅰ.創(chuàng)建目錄及文件: 1.在Linux環(huán)境下創(chuàng)建名為Gobang的文

    2024年02月03日
    瀏覽(26)
  • C++在線五子棋對戰(zhàn)(網(wǎng)頁版)項目:websocket協(xié)議

    C++在線五子棋對戰(zhàn)(網(wǎng)頁版)項目:websocket協(xié)議

    目標(biāo):認識理解websocket協(xié)議、websocket切換過程和websocket協(xié)議格式。認識和學(xué)會使用websocketpp庫常用接口。了解websocketpp庫搭建服務(wù)器流程,認識和學(xué)會使用websocketpp庫bin接口,最后使用websocketpp庫搭建服務(wù)器。 平時我們在逛某寶,點擊商品查看商品信息,從HTTP角度來看,就是客

    2024年02月13日
    瀏覽(39)
  • C++項目:在線五子棋對戰(zhàn)網(wǎng)頁版--數(shù)據(jù)模塊開發(fā)

    數(shù)據(jù)管理模塊,基于mysql數(shù)據(jù)庫進行數(shù)據(jù)管理以及封裝數(shù)據(jù)管理模塊實現(xiàn)數(shù)據(jù)庫訪問。因此,在數(shù)據(jù)庫中,我需要為每一張表創(chuàng)建出對應(yīng)類,通過類實例化的對象來訪問這張數(shù)據(jù)庫表中的數(shù) 據(jù),這樣的話當(dāng)我們要訪問哪張表的時候,使?哪個類實例化的對象即可。 那么在五子

    2024年02月13日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包