前端圍棋源碼
『壹』 如何製作圍棋動態棋譜
1、先到學棋網上注冊一個用戶,請用一個真實的郵箱注冊。因為上傳棋譜成功後,會有一封郵件發到您的注冊郵箱;
2、然後上傳棋譜。如果是在Tom、弈城、新浪上下棋,下完後的棋譜保存路徑分別如下圖所示:
7、春唯OK,大功告成!
『貳』 C/C++、VC、Delphi、java、LISP、Perl語言
一、 跨平台特性
VB:無 ★
PB:WINDOWS家族, Solaris,Macintosh ★★★
C++ Builder/Dephi:WINDOWS家族,Linux ★★★
VC:無 ★
JAVA:所有能夠運行JAVA虛擬機的操作系統 ★★★★
二、組件技術支持
VB:COM,ActiveX ★★★
PB:COM,JavaBean,Jaguar,UserObject使用:CORBA+Acti veX ★★★
C++ Builder/Dephi:COM, ActiveX CORBA(本身自帶CORBA中間件VisiBroker,
有豐富向導) ★★★★★
VC:COM,ActiveX,CORBA(沒有任何IDE支持,是所有C編譯器的功能,
需要CORBA中間件支持) ★★★
JAVA:JavaBean,CORBA;ActiveX ★★★★
三、資料庫支持級別
數據訪問對象:
VB:DAO,ADO,RDO功能相仿; ★
PB:Transaction,DwControl,可綁定任何SQL語句和存儲過程,數據訪問
具有無與比擬的靈活性 ★★★★
C++ Builder/Dephi:具有包括DataSource,Table,Query,Midas,ADO在內
的二十多個組件和類完成數據訪問 ★★★
VC:同VB,但有不少類庫可供使用,但極不方便,開發效率很低 ★★
JAVA:JAVA JDBC API,不同的IDE具有不同的組件 ★★
數據表現對象:
VB:DBGriD,與資料庫相關的數據表現控制項只有此一種,只能表現簡單表格
數據,表現手段單一 ★
PB:DataWindow對象(功能異常強大,其資源描述語句構成類似HTML的
另外一種語言,可在其中插入任何對象,具有包括DBGrid在內的數百種
數據表現方法),只此一項功能就註定了PB在資料庫的功能從誕生的那
一天起就遠遠超過了某些開發工具今天的水平 ★★★★★
C++ Builder/Dephi:具有包括DBGrid,DBNavigator,DBEdit,
DBLookupListBox在內的15個數據感知組件,DecisionCube,
DecisionQuery在內的6個數據倉庫組件和包括QRChart, QRExpr
在內的20多個報表組建,可靈活表現數據 ★★★
VC:同數據訪問對象 ★
JAVA:不同的IDE具有不同的組件,比較著名的有Jbuilder,PowerJ,
VisualAge for Java ★★
語句執行方式:
VB:將一句SQL串綁定到一個命令對象中,結果返回到ResultSet對象
中自行拆取 ★
PB:是一種真正的4GL語言,可隨意直接嵌套SQL語句返回值被賦值到
語句的變數中,支持語句級游標,存儲過程和資料庫函數,是一種類
似SQLJ的規范 ★★★★★
C++ Builder/Dephi:使用資料庫組件或類完成SQL語句串的執行和提交 ★★
VC:同數據訪問對象 ★
JAVA:SQLJ,JAVA JDBC API ★★★★
四、系統底層開發支持
VB:調用API需申明,調用不方便,不能進行DDK編程,不可深入Ring0編程,
不可嵌套匯編 ★
PB:調用API需申明,調用不方便,不能進行DDK編程,不可深入Ring0編程,
不可嵌套匯編 ★
C++ Builder/Dephi:直接調用API,可進行DDK編程,可深入Ring0編程,
可嵌套匯編 ★★★★★/★★
VC:直接調用API,可進行DDK編程,可深入Ring0編程,可嵌套匯編 ★★★★★
JAVA:推出了JINI規范但不能對不支持JINI的設備編程,眼下並不實用 ★
五、多媒體及圖形圖像開發支持
VB:可進行Direct Api編程;調用OpenGL很不方便;自帶少量圖形圖像處理
控制項,使用方便但功能一般;支持圖像文件類型較少 ★★
PB:可進行Direct Api編程;調用OpenGL很不方便;圖形圖像處理不方便
但可調用API完成圖形圖像操作,也可藉助控制項開發;支持圖像文件類型很多 ★
C++ Builder/Dephi:可進行Direct Api編程;調用OpenGL比較方便;
自帶豐富的圖形圖像處理組件及類,使用很方便且功能強大;支持圖像
文件類型一般 ★★★★★
VC:可進行Direct Api編程;調用OpenGL比較方便;自帶豐富的圖形圖像
處理類,使用不方便但功能強大;支持圖像文件類型較少 ★★★★
JAVA:很難調用Direct Api和OpenGL;自帶相當豐富的圖形圖像處理組
件及類,使用不方便但功能強大;支持圖像文件類型一般 ★★★★
六、網路或Web開發支持
VB:Asp,VBScript,具有編寫DHTML的簡單IDE,編寫靜態頁面非常方便;
用於網路通訊的支持一般 ★★
PB:DynaSript, Web.PB;提供了較多動態生成Web頁面的用戶對象和服務
以及系統對象,非常適合編寫服務端動態Web應用,有利於商業邏輯的封裝;
用於網路通訊的支持不足;靜態頁面定製支持有限 ★
C++ Builder/Dephi:ISAPI,WININET API等各類網路或互聯網API可自由
而方便的調用;提供了Server Socket,ClientSocket等三十餘個組件及類,
用來處理網路通訊控制,流處理,Mail,Email,FTP,HTTP等應用協議處理以
及生成動態頁面和商業邏輯的封裝;功能強大,使用方便 ★★★★★
VC:SAPI,WININET API等各類網路或互聯網API可自由而方便的調用;
提供CAsyncSocket等數量眾多的類;功能強大但使用不太方便 ★★★
JAVA:不可直接調用API但內置非常多的網路及互聯網功能;可利用
Servlet API,Java Bean API,以及JSP等協同開發功能強大的Web
應用;功能強大,對於某些IDE使用不太方便 ★★★★★
七、開發模式
VB:控制項開發模式(OCX) ★★
PB:組件開發模式(User Object) ★★
C++ Builder/Dephi:源代碼組件開發模式(VCL) ★★★★★
VC:應用程序框架開發模式(MFC) ★
JAVA:框架開發模式(JDK下)+組件開發模式(IDE下) ★★★
八、面向對象特性
VB:差 ★
PB:較好 ★★★
C++ Builder/Dephi:很好 ★★★★
VC:一般 ★★
JAVA:非常好 ★★★★★
九、開發效率
VB:較高 ★★★
PB:很高 ★★★★★
C++ Builder/Dephi:高 ★★★★
VC:低 ★
JAVA:高 ★★★★
十、代碼執行效率
VB:一般 ★★
PB:較高 ★★★
C++ Builder/Dephi:很高 ★★★★★
VC:很高 ★★★★★
JAVA:低 ★
十一、幫助系統
VB:很好 ★★★★★
PB:較好 ★★★
C++ Builder/Dephi:差 ★
VC:好 ★★★★
JAVA:較好 ★★★
十二、易學程度
VB:非常好 ★★★★★
PB:好 ★★★
C++ Builder/Dephi:好 ★★★
VC:不好 ★
JAVA:不好 ★
十三、使用人數
VB:很多 ★★★★★
PB:較多 ★★★
C++ Builder/Dephi:較多 ★★★
VC:多 ★★★★
JAVA:不多 ★
十四、廠商財力
VB:非常強大 ★★★★★
PB:比較強大 ★★★
C++ Builder/Dephi:一般 ★★
VC:非常強大 ★★★★★
JAVA:強大 ★★★★
十五、發展潛力
VB:差 ★
PB:一般 ★★
C++ Builder/Dephi:一般 ★★
VC:好 ★★★
JAVA:非常好 ★★★★★
十六、基礎語言廣泛性
VB:很好 ★★★★
PB:一般 ★★
C++ Builder/Dephi:很好/差 ★★★★/★
VC:很好 ★★★★
JAVA:很好 ★★★★
結論:
VB:是新人開發與系統無關的綜合應用程序的首選;容易使用和廠商財力很強
是其僅有的兩點優勢
PB:是開發大型MIS及各類資料庫跨平台應用的首選;從資料庫前端工具來講甚至遠遠超過了Oracle的Develop系列等專門的工具;從通用語言角度來講功能也與VB等不相上下;多媒體和網路功能與其他工具相比較弱
C++ Builder/Dephi:是唯一一套能夠同時適用於開發資料庫應用、網路及Web應用、分布式應用、可重用組件、系統軟體、驅動程序、多媒體及游戲等所有軟體的高效率開發環境;VCL源碼基於Object Pascal是C++ Builder 唯一的缺憾,基礎語言不夠通用和開發系統軟體功能不足是Dephi僅有的兩點不足
VC:從功能上講除了跨平台應用外什麼都可開發;從開發效率角度講只局限於開發windows系統應用、可重用組件及驅動程序
JAVA:適用於開發除了系統軟體、驅動程序、高性能實時系統、大規模圖像
處理以外所有的應用
綜合評價:
VB:46
PB:53
C++ Builder/Dephi:67/61
VC:55
JAVA:59
『叄』 棋牌源碼可以破解是真是假
假的。根據查詢相關公開信息顯示,網上還有許多騙子販賣棋牌源碼破解方法,下載後其實沒有任何功能,而且還有盜號、木馬的風險。棋牌是棋類和牌類娛樂項目讓凱慎的總稱,包括中國坦敬象棋、圍棋、國際象棋、蒙古象棋孫兆、五子棋、跳棋、國際跳棋(已列入首屆世界智力運動會項目)、軍棋、橋牌、撲克、麻將等等諸多傳統或新興娛樂項目,也是一種傳統文化。
『肆』 世界ai圍棋大賽用的ai是用伺服器跑嗎
原來棋手正通過這些電子產品與外界同夥溝通,試圖利用AI作弊。其衣扣上的微型相機實時拍攝棋局信息,負責接收的同夥利用AI技術分析棋盤局勢,並將反饋結果傳遞到棋手的無線耳機中。
據了解,棋手所使用的AI技術正是由比利時程序員Gian-Carlo Pascutto(GCP)開發的AI項目Leela Zero,它是圍棋領域為數不多的開源項目之一,所有人在Github上都可以下載使用。
由於裁判發現及時,棋手及同夥的作弊行為並未成功。不過,韓國棋院認為二人行為影響惡劣,觸犯了「業務妨礙罪」,交由警察處理後,還委託律師擬定起訴書,對二人提起了刑事訴訟。
近日,韓國東部地方法院作出最終判決:嫌疑人A以職業定段為目的,與同夥B經過周密計劃,利用智能技術違規比賽規則,嚴重破壞了比賽的公平、公正,性質非常惡劣。經認定,判處嫌疑人A一年有期徒刑,其同夥B一年有期徒刑,緩期一年執行,並提供120小時社會服務。」
至此,這場令人不齒的作弊事件算是以應有的懲罰收尾。不過,在事件的背後,有網友感嘆,現在隨便一個AI都可以戰勝職業選手了嗎?
還有網友調侃道,人工智慧已經開始奴役人類了!
談到AI在圍棋中擊敗人類,大部分人可能首先想到的都是弊虧谷歌出品的AlphaGo。
2016年,AlphaGo以4:1戰勝世界頂級職業選手李世石
2017年,AlphaGo Master再次以3:0戰勝中國圍棋甲級聯賽主將柯潔
事實上,在此之後,AI在圍棋領域的技術研發從未間斷,經過四年的發展,能夠戰勝人類世界冠軍水平的AI,也已經遠不止AlphaGo一個。
作弊工具Leela Zero,戰績頗豐
熟悉圍棋的朋友可能了解,Leela Zero 並不是一個名不見經傳的AI棋手。它曾在第32、38、42屆KGS計算機圍棋大賽多次奪冠,在2008年計算機奧林匹克賽上獲得九路圍棋銀牌和十九路圍棋銅牌。
Leela Zero是GCP根據谷歌最強開源項目Alpha Zero擴展而來。如同Alpha Zero的發展路徑,它不藉助任何人類知識,完全從零開始訓練。同時,租乎神它採用分布式計算,通過他人電腦生成的自對弈棋譜傳送到伺服器上進行訓練,以此藉助全球志願者的力量為Leela Zero項頃蠢目提供算力支持。
據了解,Leela Zero的棋力正是通過神經網路權重的不斷更迭而提升的(權重:表徵神經網路內部聯系的一系列參數)。當伺服器對棋譜進行訓練後,會產生新的網路權重,新的權重會與之前的最強權重對局,用以檢驗棋力,如果它在400局中勝率超過55%就會被更新為當前的最強權重。
現在每天有近600人為Leela Zero提供訓練棋譜,在最近半年時間內,Leela Zero已經自我對弈700萬局,經歷128次權重更迭。
另外,Leela-Zero憑借出色的棋力已經成為了人類最佳圍棋陪練師。它非常規性的打法、出其不意的布局,常常能夠帶給人類突破性的啟發。因此很多圍棋愛好者喜歡通過與它博弈或者復盤訓練來提升自己的棋力。
一位微博網友還分享了他看Leela-Zero自戰局的感受,特別賞心悅目。
中國棋士柯潔也發文表示:Leela Zero訓練厲害了,我是不是也要攢錢買一台超級計算機來跑AI,現在學編程還來得及嗎?
這款Leela Zero項目從2017年就在Github開源了,目前已經收割了4.1k星標。Github開源地址奉上,鏈接內含詳細下載安裝流程,按提示操作完成後,就可以與AI棋手在線博弈了。
AI碾壓人類,輕輕鬆鬆
如柯潔所說現在國內外的AI棋手已經非常之多,而且能夠打敗世界級職業選手的也不再少數。如國內經典棋手騰訊絕藝。
在最近的2019年,絕藝第四次奪得了「世界智能圍棋公開賽冠軍」。它是騰訊AI Lab自研的一款圍棋AI。從2016年發布首個版本到現在,已經在各大賽事中,先後戰勝過柯潔,古力,朴廷桓等一百多位職業棋手。
不過,值得一提的是,這位AI圍棋常勝將軍卻在2018年的世界人工智慧圍棋大賽中,敗給了自家兄弟「PhoenixGo」。
PhoenixGo,俗稱「金毛」(因比賽時的頭像而得名),是微信翻譯團隊研發人工智慧圍棋程序。在這場世界級AI圍棋大賽中,PhoenixGo一舉奪冠,戰勝了來自中、日、韓、歐美等國家和地區的一流AI圍棋高手。如LeelaZero、TSGo、DolBaram(石子旋風)、Golois,HEROZ Kishi、Baki等。(Github開源地址)
說到國內比較出色的AI棋手,還有一位不得不提,它就是「星陣圍棋」。在2018年,「貝瑞基因杯」世界人工智慧圍棋大賽人機大戰中,星陣圍棋執黑145手戰勝柯潔,之後,在「讓先三十番棋」挑戰賽中,輪番對戰職業選手時越、江維傑、崔哲瀚、元晟溱、周俊勛等世界冠軍,最終以40:1的戰績奪冠,勝率達到97.6%。
更重要的是,星陣圍棋是一款純國產AI。其他AI棋手大部分都是師從谷歌論文,星陣是獨創了自己的研發程序,而且它的對戰策略也與谷歌明顯不同。
谷歌演算法更偏向勝率,為保持大局經常會選擇暫時退讓,而星陣的策略是強勢進攻,把人類按在地上摩擦,能前進絕不退讓。
據了解,星際圍棋的前身是清華大學的「神運算元」,後經過深客科技完成了後續的技術升級。該公司董事長金涬博士,在大數據、深度學習、人工智慧領域深耕多年,是人工智慧在圍棋產業應用的重要推動者。
歷數國外的圍棋AI,除了谷歌的Alpha系列外,最出色的可能就是Facebook出品的ELF OpenGo了。這款AI圍棋項目也於2018年在Github開源了。
研究團隊表示,此次開放源代碼是希望激勵相關愛好者思考這項技術新的應用和研究方向。
在戰績方面,ELF OpenGo曾與Leela Zero在一場比賽中交手,最終以200:0的戰績獲勝。此外,它還在與世界級職業選手的對戰賽中,創造了14勝0負的記錄。據官方介紹,在比賽中 OpenGo 使用單塊 GPU 每步 50 秒的搜索時間(每步搜索 8 萬個局面),而人類棋手並沒有限制下棋思考的時間。
從圍棋轉戰RTS
看到這里,AI在圍棋界碾壓人類頂級選手已經成為一個非常輕松的事兒。不過,AI研發的目的並不在此,圍棋因其游戲規則和策略的復雜性被研究人員視為AI訓練的最佳試驗田,一方面,AI通過與人類的博弈對抗,可以快速提升其深度學習和思考能力。另一方面,其綜合大數據而獲得作戰布局,也可以為人類帶來更多的啟發性思考。可以說二者在相互博弈同共同成長。
此外,圍棋的復雜性已經不能滿足AI的需求了。近些年,AI的訓練場景已經逐步從圍棋、德州撲克轉向了更為復雜的RTS即時策略性游戲。作為經典RTS游戲,《星際爭霸》因非完全信息、作戰空間復雜、毫秒級決策等特點,而成為眾多團隊的研發目標。
目前,以谷歌為首的人工智慧公司在該領域探索也取得了突破性進展。 去年10月,谷歌發表最新論文登上《Nature》雜志,論文指出其研發的AlphaStar在排行榜單上超越了 99.8%的活躍玩家,而且最高達到了星際爭霸 2 人類對戰天梯的頂級水平,並給出了對戰影像資料。
此外,國內一家人工智慧公司啟元世界異軍突起,其研發「星際AI」在最近的挑戰賽中以2:0戰勝了世界頂級職業選手。該研發團隊表示,公司自成立之初便圍繞《星際爭霸》開展星際AI的研發工作,其目的一是在游戲行業,為玩家們提供更好的游戲體驗,二是是通過AI智能體的訓練,敲開通向通用人工智慧(AGI)的大門。
『伍』 求五子棋C源代碼
這個是稍微好一點的了,以前沒事試過
/*
五子棋
*/
#include<stdio.h>
#include<stdlib.h>
#include<graphics.h>
#include<bios.h>
#include<conio.h>
#define LEFT 0x4b00
#define RIGHT 0x4d00
#define DOWN 0x5000
#define UP 0x4800
#define ESC 0x011b
#define SPACE 0x3920
#define BILI 20
#define JZ 4
#define JS 3
#define N 19
int box[N][N];
int step_x,step_y ;
int key ;
int flag=1 ;
void draw_box();
void draw_cicle(int x,int y,int color);
void change();
void judgewho(int x,int y);
void judgekey();
int judgeresult(int x,int y);
void attentoin();
void attention()
{
char ch ;
window(1,1,80,25);
textbackground(LIGHTBLUE);
textcolor(YELLOW);
clrscr();
gotoxy(15,2);
printf("游戲操作規則:");
gotoxy(15,4);
printf("Play Rules:");
gotoxy(15,6);
printf("1、按左右上下方向鍵移動棋子");
gotoxy(15,8);
printf("1. Press Left,Right,Up,Down Key to move Piece");
gotoxy(15,10);
printf("2、按空格確定落棋子");
gotoxy(15,12);
printf("2. Press Space to place the Piece");
gotoxy(15,14);
printf("3、禁止在棋盤外按空格");
gotoxy(15,16);
printf("3. DO NOT press Space outside of the chessboard");
gotoxy(15,18);
printf("你是否接受上述的游戲規則(Y/N)");
gotoxy(15,20);
printf("Do you accept the above Playing Rules? [Y/N]:");
while(1)
{
gotoxy(60,20);
ch=getche();
if(ch=='Y'||ch=='y')
break ;
else if(ch=='N'||ch=='n')
{
window(1,1,80,25);
textbackground(BLACK);
textcolor(LIGHTGRAY);
clrscr();
exit(0);
}
gotoxy(51,12);
printf(" ");
}
}
void draw_box()
{
int x1,x2,y1,y2 ;
setbkcolor(LIGHTBLUE);
setcolor(YELLOW);
gotoxy(7,2);
printf("Left, Right, Up, Down KEY to move, Space to put, ESC-quit.");
for(x1=1,y1=1,y2=18;x1<=18;x1++)
line((x1+JZ)*BILI,(y1+JS)*BILI,(x1+JZ)*BILI,(y2+JS)*BILI);
for(x1=1,y1=1,x2=18;y1<=18;y1++)
line((x1+JZ)*BILI,(y1+JS)*BILI,(x2+JZ)*BILI,(y1+JS)*BILI);
for(x1=1;x1<=18;x1++)
for(y1=1;y1<=18;y1++)
box[x1][y1]=0 ;
}
void draw_circle(int x,int y,int color)
{
setcolor(color);
setlinestyle(SOLID_LINE,0,1);
x=(x+JZ)*BILI ;
y=(y+JS)*BILI ;
circle(x,y,8);
}
void judgekey()
{
int i ;
int j ;
switch(key)
{
case LEFT :
if(step_x-1<0)
break ;
else
{
for(i=step_x-1,j=step_y;i>=1;i--)
if(box[i][j]==0)
{
draw_circle(step_x,step_y,LIGHTBLUE);
break ;
}
if(i<1)break ;
step_x=i ;
judgewho(step_x,step_y);
break ;
}
case RIGHT :
if(step_x+1>18)
break ;
else
{
for(i=step_x+1,j=step_y;i<=18;i++)
if(box[i][j]==0)
{
draw_circle(step_x,step_y,LIGHTBLUE);
break ;
}
if(i>18)break ;
step_x=i ;
judgewho(step_x,step_y);
break ;
}
case DOWN :
if((step_y+1)>18)
break ;
else
{
for(i=step_x,j=step_y+1;j<=18;j++)
if(box[i][j]==0)
{
draw_circle(step_x,step_y,LIGHTBLUE);
break ;
}
if(j>18)break ;
step_y=j ;
judgewho(step_x,step_y);
break ;
}
case UP :
if((step_y-1)<0)
break ;
else
{
for(i=step_x,j=step_y-1;j>=1;j--)
if(box[i][j]==0)
{
draw_circle(step_x,step_y,LIGHTBLUE);
break ;
}
if(j<1)break ;
step_y=j ;
judgewho(step_x,step_y);
break ;
}
case ESC :
break ;
case SPACE :
if(step_x>=1&&step_x<=18&&step_y>=1&&step_y<=18)
{
if(box[step_x][step_y]==0)
{
box[step_x][step_y]=flag ;
if(judgeresult(step_x,step_y)==1)
{
sound(1000);
delay(1000);
nosound();
gotoxy(30,4);
if(flag==1)
{
setbkcolor(BLUE);
cleardevice();
setviewport(100,100,540,380,1);
/*定義一個圖形窗口*/
setfillstyle(1,2);
/*綠色以實填充*/
setcolor(YELLOW);
rectangle(0,0,439,279);
floodfill(50,50,14);
setcolor(12);
settextstyle(1,0,5);
/*三重筆劃字體, 水平放?5倍*/
outtextxy(20,20,"The White Win !");
setcolor(15);
settextstyle(3,0,5);
/*無襯筆劃字體, 水平放大5倍*/
outtextxy(120,120,"The White Win !");
setcolor(14);
settextstyle(2,0,8);
getch();
closegraph();
exit(0);
}
if(flag==2)
{
setbkcolor(BLUE);
cleardevice();
setviewport(100,100,540,380,1);
/*定義一個圖形窗口*/
setfillstyle(1,2);
/*綠色以實填充*/
setcolor(YELLOW);
rectangle(0,0,439,279);
floodfill(50,50,14);
setcolor(12);
settextstyle(1,0,8);
/*三重筆劃字體, 水平放大8倍*/
outtextxy(20,20,"The Red Win !");
setcolor(15);
settextstyle(3,0,5);
/*無襯筆劃字體, 水平放大5倍*/
outtextxy(120,120,"The Red Win !");
setcolor(14);
settextstyle(2,0,8);
getch();
closegraph();
exit(0);
}
}
change();
break ;
}
}
else
break ;
}
}
void change()
{
if(flag==1)
flag=2 ;
else
flag=1 ;
}
void judgewho(int x,int y)
{
if(flag==1)
draw_circle(x,y,15);
if(flag==2)
draw_circle(x,y,4);
}
int judgeresult(int x,int y)
{
int j,k,n1,n2 ;
while(1)
{
n1=0 ;
n2=0 ;
/*水平向左數*/
for(j=x,k=y;j>=1;j--)
{
if(box[j][k]==flag)
n1++;
else
break ;
}
/*水平向右數*/
for(j=x,k=y;j<=18;j++)
{
if(box[j][k]==flag)
n2++;
else
break ;
}
if(n1+n2-1>=5)
{
return(1);
break ;
}
/*垂直向上數*/
n1=0 ;
n2=0 ;
for(j=x,k=y;k>=1;k--)
{
if(box[j][k]==flag)
n1++;
else
break ;
}
/*垂直向下數*/
for(j=x,k=y;k<=18;k++)
{
if(box[j][k]==flag)
n2++;
else
break ;
}
if(n1+n2-1>=5)
{
return(1);
break ;
}
/*向左上方數*/
n1=0 ;
n2=0 ;
for(j=x,k=y;j>=1,k>=1;j--,k--)
{
if(box[j][k]==flag)
n1++;
else
break ;
}
/*向右下方數*/
for(j=x,k=y;j<=18,k<=18;j++,k++)
{
if(box[j][k]==flag)
n2++;
else
break ;
}
if(n1+n2-1>=5)
{
return(1);
break ;
}
/*向右上方數*/
n1=0 ;
n2=0 ;
for(j=x,k=y;j<=18,k>=1;j++,k--)
{
if(box[j][k]==flag)
n1++;
else
break ;
}
/*向左下方數*/
for(j=x,k=y;j>=1,k<=18;j--,k++)
{
if(box[j][k]==flag)
n2++;
else
break ;
}
if(n1+n2-1>=5)
{
return(1);
break ;
}
return(0);
break ;
}
}
void main()
{
int gdriver=VGA,gmode=VGAHI;
clrscr();
attention();
initgraph(&gdriver,&gmode,"c:\\tc");
/* setwritemode(XOR_PUT);*/
flag=1 ;
draw_box();
do
{
step_x=0 ;
step_y=0 ;
/*draw_circle(step_x,step_y,8); */
judgewho(step_x-1,step_y-1);
do
{
while(bioskey(1)==0);
key=bioskey(0);
judgekey();
}
while(key!=SPACE&&key!=ESC);
}
while(key!=ESC);
closegraph();
}
『陸』 如何用C語言繪出一個圍棋盤
--
以怎麼不用 MS VC++6 ??
編C語言一般都用啊
還有\xCD是C語言
Ascii代碼 表示一個圖形
用循環語句啊!
等我一下 晚上寫出來 貼上哦
晚上10:00 上完課回來
呵呵 分給不給 隨便 你的問題讓我熟練了許多
分不重要了
我終於寫出來了
調試了30分鍾啊!
純粹的循環 + 判斷
-- 我就這點水平了 演算法可能不好
如果有更好的告訴我 上QQ 或發網路消息給我
網路的顯示有問題 最好
用源代碼格式化工具格式化一下 網路有搜
#include <stdio.h>
void main()
{
int n,m,x,y,temp,j=0,i=0 ;
printf("輸入棋盤的橫格數,豎格數:\n");
scanf("%d,%d",&x,&y);
printf("%d,%d\n",x,y);
n=2*x+1 ;
m=2*y+1 ;
printf("%d,%d\n",n,m);
while(j<m)
{
j++;
temp=j%2 ;
i=0 ;
if(j==1)
{
while(i<n)
{
i++;
if(i==1)
{
printf("\xC9");
continue ;
}
if(n==i)
{
printf("\xBB\n");
continue ;
}
if(i%2!=0)
{
printf("\xCB");
continue ;
}
if(i%2==0)
{
printf("\xCD\xCD\xCD");
continue ;
}
}
continue ;
}
if(m==j)
{
while(i<n)
{
i++;
if(i==1)
{
printf("\xC8");
continue ;
}
if(n==i)
{
printf("\xBC\n");
continue ;
}
if(i%2!=0)
{
printf("\xCA");
continue ;
}
if(i%2==0)
{
printf("\xCD\xCD\xCD");
continue ;
}
}
continue ;
}
if(temp==0)
{
while(i<n)
{
i++;
if(i%2!=0)
{
printf("\xBA");
if(n==i)printf("\n");
continue ;
}
if(i%2==0)
{
printf(" ");
continue ;
}
}
continue ;
}
if(temp!=0&&j!=1)
{
while(i<n)
{
i++;
if(i==1)
{
printf("\xCC");
continue ;
}
if(n==i)
{
printf("\xB9\n");
continue ;
}
if(i%2!=0)
{
printf("\xCE");
continue ;
}
if(i%2==0)
{
printf("\xCD\xCD\xCD");
continue ;
}
}
continue ;
}
}
}
100%編譯通過
可以畫出任意大小的棋盤
如 5*3 5*5
只要你的屏幕能夠顯示
以上是用圖像庫畫的棋盤
下面是用 __ 和 |
畫的棋盤 其實很簡單 替換一下就可以了
#include <stdio.h>
void main()
{
int n,m,x,y,temp,j=0,i=0 ;
printf("輸入棋盤的橫格數,豎格數:\n");
scanf("%d,%d",&x,&y);
printf("%d,%d\n",x,y);
n=2*x+1 ;
m=2*y+1 ;
printf("%d,%d\n",n,m);
while(j<m)
{
j++;
temp=j%2 ;
i=0 ;
if(j==1)
{
while(i<n)
{
i++;
if(i==1)
{
printf("__");
continue ;
}
if(n==i)
{
printf("__\n");
continue ;
}
if(i%2!=0)
{
printf("__");
continue ;
}
if(i%2==0)
{
printf("__");
continue ;
}
}
continue ;
}
if(m==j)
{
while(i<n)
{
i++;
if(i==1)
{
printf("__");
continue ;
}
if(n==i)
{
printf("__\n");
continue ;
}
if(i%2!=0)
{
printf("__");
continue ;
}
if(i%2==0)
{
printf("__");
continue ;
}
}
continue ;
}
if(temp==0)
{
while(i<n)
{
i++;
if(i%2!=0)
{
printf("|");
if(n==i)printf("\n");
continue ;
}
if(i%2==0)
{
printf(" ");
continue ;
}
}
continue ;
}
if(temp!=0&&j!=1)
{
while(i<n)
{
i++;
if(i==1)
{
printf("__");
continue ;
}
if(n==i)
{
printf("__\n");
continue ;
}
if(i%2!=0)
{
printf("__");
continue ;
}
if(i%2==0)
{
printf("__");
continue ;
}
}
continue ;
}
}
}
『柒』 求圍棋的VB源代碼~
來~加 我 的QQ405557154 我做了一個,還有一同學做的,還有一是網上的朋友做的呵呵
Private Sub Timer1_Timer()
Dim ms As Boolean
Dim Info, temp As String
Dim p, p1, p2, i As Integer
Dim Ch
' Begin of Time Show Process
If ModemState <> LOGIN And SocketState <> CONNECTED Then
'it is not a multiusers game
Exit Sub
Else
If (S_R = 1) And (TURN = BLACKP) Then
Black_Time = Black_Time + Time - Start_Time
TimeB.Caption = CDate(Black_Time / 200)
Else
If (S_R = 1) And (TURN = WHITEP) Then
White_Time = White_Time + Time - Start_Time
TimeW.Caption = CDate(White_Time / 200)
Else
If (S_R = 0) And (TURN = WHITEP) Then
Black_Time = Black_Time + Time - Start_Time
TimeB.Caption = CDate(Black_Time / 200)
Else
If (S_R = 0) And (TURN = BLACKP) Then
White_Time = White_Time + Time - Start_Time
TimeW.Caption = CDate(White_Time / 200)
End If
End If
End If
End If
End If
'End If
' End of Time Show Process
'Begin of winsockt process
If SocketState = CONNECTED And Begin_Flag = 1 Then
ms = Net.Message_Exist
If ms = False Then
Exit Sub
End If
Info = Net.WaitForValue(Chr$(26), 5)
If g_ErrorCode = 1 Then
'Some error such as Timeout occured
Exit Sub
End If
p1 = InStr(Info, "B")
p2 = InStr(Info, "E|;")
If p1 = 0 Or p2 = 0 Then
Exit Sub
End If
temp = Mid$(Info, p1 + 1, p2 - p1 - 1)
ParseLine (temp)
Msg(Msg_No).No = CInt(ParseArray(1))
Msg(Msg_No).Color = CInt(ParseArray(2))
If IsNumeric(ParseArray(3)) Then
Msg(Msg_No).X = CInt(ParseArray(3))
Msg(Msg_No).Y = CInt(ParseArray(4))
Else
Msg(Msg_No).X = ParseArray(3)
Msg(Msg_No).Y = ParseArray(4)
End If
If Msg(Msg_No).Color = GIVEUP Then
Beep
MsgBox ("對方已經認輸了")
Net.Winsock1.SendData ("R_O" + Chr$(26))
Pause 3
Call Begin_Click
Exit Sub
End If
If Side = BLACKP Then
p = Draw_Point(Msg(Msg_No).X, Msg(Msg_No).Y, WHITEP)
Record(Step).Color = WHITEP
step_show.Cls
step_show.Print Step
TURN = BLACKP
Else
p = Draw_Point(Msg(Msg_No).X, Msg(Msg_No).Y, BLACKP)
Record(Step).Color = BLACKP
step_show.Cls
step_show.Print Step
TURN = WHITEP
End If
Record(Step).X = Msg(Msg_No).X
Record(Step).Y = Msg(Msg_No).Y
Step = Step + 1
S_R = 1
R_R = 0
p = Count_All_Gas
If (Msg(Msg_No).X > 0 And Msg(Msg_No).Y > 0 _
And Msg(Msg_No).X < 20 And Msg(Msg_No).Y < 20) Then
Board(Msg(Msg_No).X, Msg(Msg_No).Y).Current = True
Refresh_Board
Board(Msg(Msg_No).X, Msg(Msg_No).Y).Current = False
End If
Msg_No = Msg_No + 1
Pause 1
Net.Winsock1.SendData ("R_O" + Chr$(26))
Exit Sub
End If
'End of process of winsocket
'Begin of modem process
If ModemState <> LOGIN Or R_R <> 1 Then
'It isn't a Inter_Modem Game
Exit Sub
End If
ms = Modem_F.Exist_Msg
If ms = False Then
'IO Port don't have any message
Exit Sub
End If
Info = Modem_F.WaitForValue(Chr$(26), 5)
'Wait a playing message
If g_ErrorCode = 1 Then
'Some error such as Timeout occured
Exit Sub
End If
p1 = InStr(Info, "B")
p2 = InStr(Info, "E|;")
If p1 = 0 Or p2 = 0 Then
Exit Sub
End If
temp = Mid$(Info, p1 + 1, p2 - p1 - 1)
ParseLine (temp)
Msg(Msg_No).No = CInt(ParseArray(1))
Msg(Msg_No).Color = CInt(ParseArray(2))
If IsNumeric(ParseArray(3)) Then
Msg(Msg_No).X = CInt(ParseArray(3))
Msg(Msg_No).Y = CInt(ParseArray(4))
Else
Msg(Msg_No).X = ParseArray(3)
Msg(Msg_No).Y = ParseArray(4)
End If
Modem_F.Comm1.InBufferCount = 0
'Clear Buffer
If Msg(Msg_No).Color = LOGOUT Then
Beep
MsgBox ("對方已經退出了")
Modem_F.Comm1.InBufferCount = 0
Modem_F.Comm1.Output = "R_O" + Chr$(26)
Cls
Step = 0
Start_Time = Time
Black_Time = 0
White_Time = 0
Exit Sub
End If
If Msg(Msg_No).Color = FINISHED Then
Beep
Ch = MsgBox("對方要求結束比賽,可以嗎?", vbYesNo)
Modem_F.Comm1.InBufferCount = 0
If Ch = 6 Then
Modem_F.Comm1.Output = "YESR_O" + Chr$(26)
Else
Modem_F.Comm1.Output = "NOR_O" + Chr$(26)
Exit Sub
End If
PlayState = FINISHED
Count_Area.Enabled = True
End If
If Msg(Msg_No).Color = GIVEUP Then
Beep
MsgBox ("對方已經認輸了")
Modem_F.Comm1.InBufferCount = 0
Modem_F.Comm1.Output = "R_O" + Chr$(26)
Call Begin_Click
Exit Sub
End If
If Msg(Msg_No).Color = TALK Then
Beep
MsgBox (Modem_F.His_Name.Text & "說: " & Msg(Msg_No).X)
Modem_F.Comm1.InBufferCount = 0
Modem_F.Comm1.Output = "R_O" + Chr$(26)
Exit Sub
End If
If Msg(Msg_No).Color = UNDO Then
Step = Step - 1
Beep
Modem_F.Comm1.InBufferCount = 0
Modem_F.Comm1.Output = "R_O" + Chr$(26)
Draw_Board
Ini_Board
For i = 1 To Step - 1
Board(Record(i).X, Record(i).Y).Current = False
p = Draw_Point(Record(i).X, Record(i).Y, Record(i).Color)
step_show.Cls
step_show.Print Step
p = Count_All_Gas
Next i
Board(Record(Step - 1).X, Record(Step - 1).Y).Current = True
Refresh_Board
Board(Record(Step - 1).X, Record(Step - 1).Y).Current = False
S_R = 1
R_R = 0
TURN = Side
Exit Sub
End If
Modem_F.Comm1.InBufferCount = 0
Modem_F.Comm1.Output = "R_O" + Chr$(26)
If Side = BLACKP Then
p = Draw_Point(Msg(Msg_No).X, Msg(Msg_No).Y, WHITEP)
Record(Step).Color = WHITEP
step_show.Cls
step_show.Print Step
Else
p = Draw_Point(Msg(Msg_No).X, Msg(Msg_No).Y, BLACKP)
Record(Step).Color = BLACKP
step_show.Cls
step_show.Print Step
End If
Record(Step).X = Msg(Msg_No).X
Record(Step).Y = Msg(Msg_No).Y
Step = Step + 1
S_R = 1
R_R = 0
p = Count_All_Gas
If (Msg(Msg_No).X > 0 And Msg(Msg_No).Y > 0 _
And Msg(Msg_No).X < 20 And Msg(Msg_No).Y < 20) Then
Board(Msg(Msg_No).X, Msg(Msg_No).Y).Current = True
Refresh_Board
Board(Msg(Msg_No).X, Msg(Msg_No).Y).Current = False
End If
Msg_No = Msg_No + 1
End Sub
Private Sub Timer2_Timer()
ShowS.Cls
ShowS.Print " :-):-):-):-):-) " + Show_String(C1) + " (:-(:-(:-(:-(:-"
C1 = C1 + 1
If C1 = 10 Then
C1 = 0
End If
Game_Time.Cls
Game_Time.Print " 現在時間: " & Time
End Sub
Private Sub Set_Hand(h As Integer)
'設置讓子(1-9)
Dim p As Integer
If h <= 1 Then
'Not a Handicap game
Exit Sub
End If
部分代碼。。
『捌』 圍棋java源代碼
就給你一個吧,只不過沒有添加棋子,盯宏寬你自己搞吧。import java.applet.*;
import java.awt.*;
import java.awt.event.*;
class ChessPad extends Panel implements MouseListener,ActionListener
{int x=-1,y=-1,棋子顏色=1;
Button button=new Button("重新開局");
TextField text_1=new TextField("請絕舉黑棋下子"),
text_2=new TextField();
ChessPad()
{setSize(440,440);
setLayout(null);setBackground(Color.pink);
addMouseListener(this);add(button);button.setBounds(10,5,60,26);
button.addActionListener(this);
add(text_1);text_1.setBounds(90,5,90,24);
add(text_2);text_2.setBounds(290,5,90,24);
text_1.setEditable(false);text_2.setEditable(false);
}
public void paint(Graphics g)
{for(int i=40;i<凱亮=380;i+=20)
{g.drawLine(40,i,400,i);
}
g.drawLine(40,400,400,400);
for(int j=40;j<=380;j+=20)
{g.drawLine(j,40,j,400);
}
g.drawLine(400,40,400,400);
g.fillOval(97,97,6,6);g.fillOval(337,97,6,6);
g.fillOval(97,337,6,6);g.fillOval(337,337,6,6);
g.fillOval(217,217,6,6);
}
public void mousePressed(MouseEvent e)
{if(e.getModifiers()==InputEvent.BUTTON1_MASK)
{x=(int)e.getX();y=(int)e.getY();
ChessPoint_black chesspoint_black=new ChessPoint_black(this);
ChessPoint_white chesspoint_white=new ChessPoint_white(this);
int a=(x+10)/2,b=(y+10)/2;
if(x/20<2||y/20<2||x/20>19||y/20>19)
{}
else
{
if(棋子顏色==1)
{this.add(chesspoint_black);
chesspoint_black.setBounds(a*20-7,b*20-7,16,16);
棋子顏色=棋子顏色*(-1);
text_2.setText("請白棋下子");
text_1.setText("");
}
else if(棋子顏色==-1)
{this.add(chesspoint_white);
chesspoint_white.setBounds(a*20-7,b*20-7,16,16);
棋子顏色=棋子顏色*(-1);
text_1.setText("請黑棋下子");
text_2.setText("");
}
}
}
}
public void mouseReleased(MouseEvent e){}
public void mouseEntered(MouseEvent e){}
public void mouseExited(MouseEvent e){}
public void mouseClicked(MouseEvent e){}
public void actionPerformed(ActionEvent e)
{this.removeAll();棋子顏色=1;
add(button);button.setBounds(10,5,60,26);
add(text_1);text_1.setBounds(90,5,90,24);
text_2.setText("");text_1.setText("請黑棋下子");
add(text_2);text_2.setBounds(290,5,90,24);
}
}
class ChessPoint_black extends Canvas implements MouseListener
{ChessPad chesspad=null;
ChessPoint_black(ChessPad p)
{setSize(20,20);chesspad=p;addMouseListener(this);
}
public void paint(Graphics g)
{g.setColor(Color.black);g.fillOval(0,0,14,14);
}
public void mousePressed(MouseEvent e)
{if(e.getModifiers()==InputEvent.BUTTON3_MASK)
{chesspad.remove(this);
chesspad.棋子顏色=1;
chesspad.text_2.setText("");chesspad.text_1.setText("請黑棋下子");
}
}
public void mouseReleased(MouseEvent e){}
public void mouseEntered(MouseEvent e){}
public void mouseExited(MouseEvent e){}
public void mouseClicked(MouseEvent e)
{if(e.getClickCount()>=2)
chesspad.remove(this);
}
}
class ChessPoint_white extends Canvas implements MouseListener
{ChessPad chesspad=null;
ChessPoint_white(ChessPad p)
{setSize(20,20);addMouseListener(this);
chesspad=p;
}
public void paint(Graphics g)
{g.setColor(Color.white);g.fillOval(0,0,14,14);
}
public void mousePressed(MouseEvent e)
{if(e.getModifiers()==InputEvent.BUTTON3_MASK)
{chesspad.remove(this);
chesspad.棋子顏色=-1;
chesspad.text_2.setText("請白棋下子");chesspad.text_1.setText("");
}
}
public void mouseReleased(MouseEvent e){}
public void mouseEntered(MouseEvent e){}
public void mouseExited(MouseEvent e){}
public void mouseClicked(MouseEvent e)
{if(e.getClickCount()>=2)
chesspad.remove(this);
}
}
public class Chess extends Frame
{ChessPad chesspad=new ChessPad();
Chess()
{setVisible(true);
setLayout(null);
Label label=new Label("單擊左鍵下子,雙擊吃子,右擊棋子悔棋",Label.CENTER);
add(label);label.setBounds(70,55,440,26);
label.setBackground(Color.orange);
add(chesspad);chesspad.setBounds(70,90,440,440);
addWindowListener(new WindowAdapter()
{public void windowClosing(WindowEvent e)
{System.exit(0);
}
});
pack();setSize(600,550);
}
public static void main (String args[])
{Chess chess=new Chess();
}
}
『玖』 急求井字游戲的編程源代碼(MFC格式)
「井字棋」游戲(又叫「三子棋」),是一款十分經典的益智小游戲,想必很多玩家都有玩過。「井字棋」的棋盤很簡單,是一個3×3的格子,很像中國文字中的「井」字,所以得名「井字棋」。「井字棋」游戲的規則與「五子棋」十分類似,「五子棋」的規則是一方首先五子連成一線就勝利;「井字棋」是一方首先三子連成一線就勝利。
井字棋(英文名Tic-Tac-Toe)
井字棋的出現年代估計已不可考,西方人認為這是由古羅馬人發明的;但我們中國人認為,既然咱們都發明了圍棋、五子棋,那發明個把井字棋自然是不在話下。這些純粹是口舌之爭了,暫且不提。
想起小時候上課喜歡玩井字棋,只要一張草稿紙、一支筆、同桌兩人就可以玩了。上體育課,也可以拿著樹枝在沙坑裡玩。但一直感覺這游戲太簡單了,後來接觸了五子棋,著迷了一陣,但水平總是很差,便也不玩了。
一字棋游戲極小極大分析法
設有九個空格,由MAX,MIN二人對弈,輪到誰走棋誰就往空格上放一隻自己的棋子,誰先使自己的棋子構成「三子成一線」(同一行或列或對角線全是某人的棋子),誰就取得了勝利。
用叉號表示MAX,用圓圈代表MIN。
比如右圖中就是MIN取勝的棋局。
為了不致於生成太大的博弈樹,假設每次僅擴展兩層。估價函數定義如下:
設棋局為P,估價函數為e(P)。
(1) 若P對任何一方來說都不是獲勝的位置,則e(P)=e(那些仍為MAX空著的完全的行、列或對角線的總數)-e(那些仍為MIN空著的完全的行、列或對角線的總數)
(2) 若P是MAX必勝的棋局,則e(P)=+∞。
(3) 若P是B必勝的棋局,則e(P)=-∞。
比如P如右圖示,則e(P)=6-4=2
要注意利用棋盤位置的對稱性,在生成後繼節點的位置時,下列博弈結局
都是相同的棋局(在博弈中,一宇棋的分枝系數比較小起初是由於對稱性,而後是由於棋盤上未布子的空格減少所致)。圖3.15畫出了經過兩層搜索生成的博弈樹,靜態估值記在端節點下面,倒推值記在圓圈內。
由於右圖所示位置具有最大的倒推值,它應當選取為MAX的第一步(正好是MAX的最好的優先走步)。
現在我們假設MAX走了這一步,而MIN的回步是直接在X上方的空格里放上一個圓圈(對MAX來說這是一步壞棋,他一定沒有採用好的搜索策略)。下一步,MAX又在新的格局下搜索兩層,產生如圖3.16所示的搜索圖。
現在圖中MAX有兩個可能「最好的」優先走步,假設MAX走了圖上指明的那一步。而MIN為了避免立即敗北被迫走了另一步,從而產生如下棋局:MAX再次搜索,產生如圖3.17所示的樹。
在這棵樹中某些端節點(例如其中一個標記著A)代表MIN獲勝,因此它們的估值為—∞。當這些估值被倒推回去時,可看到MAX的最好的也是唯一能使他避免立即失敗的一個走步。現在,MIN可以看出MAX必然在他的下一走步中獲勝,因此,MIN只好認輸。
按極大極小演算法編程下一字棋的演示(右圖,可以點擊操作)...
我們就利用Visual Basic編寫一個「井字棋」的小游戲。
【設計思路】
首先,我們要知道,「井字棋」游戲是一款典型的棋類游戲,游戲時一方式是電腦,另一方是玩家。所以,這類游戲在開始時有兩種方式:一種是玩家先走;另一種是電腦先走。這是我們要考慮的第一個問題。
其次,由於與玩家對戰的是計算機,所以我們要編寫一個過程(Chuqi),它可以使程序模擬人的思維與人下棋(其實就是「人工智慧」的體現),這個Chuqi過程也是本游戲軟體的關鍵。此外,我們還要編寫兩個過程(Lianxian和Shuying),Lianxian過程用來時刻判斷棋盤中是否有三個棋子連成一線;Shuying過程用來判斷如果有三個棋子連成一線,是哪一方連成一線的,即判斷哪一方獲勝。
以上幾個問題就是該「井字棋」游戲實現的關鍵思路。....