如何用python turtle画一个中国象棋的棋盘?

Python019

如何用python turtle画一个中国象棋的棋盘?,第1张

#绘制棋盘,每个格子50

import turtle

t=turtle.Pen()

bs=50

#画直线

def line(x,y,z):

    t.penup()

    t.goto(x,y)

    t.pendown()

    t.fd(z)

#两点直线

def any(a,b,c,d):

    t.penup()

    t.goto(a,b)

    t.pendown()

    t.goto(c,d)

#画L型

def typeL(x,y):

    t.penup()

    t.goto(x-bs*0.25, y+bs*0.075)

    t.pendown()

    t.goto(x-bs*0.075, y+bs*0.075)

    t.goto(x - bs*0.075, y + bs*0.25)

    t.penup()

    t.goto(x - bs*0.25, y - bs*0.075)

    t.pendown()

    t.goto(x - bs*0.075, y - bs*0.075)

    t.goto(x - bs*0.075, y - bs*0.25)

    t.penup()

    t.goto(x+bs*0.25, y+bs*0.075)

    t.pendown()

    t.goto(x+bs*0.075, y+bs*0.075)

    t.goto(x + bs*0.075, y + bs*0.25)

    t.penup()

    t.goto(x + bs*0.25, y - bs*0.075)

    t.pendown()

    t.goto(x + bs*0.075, y - bs*0.075)

    t.goto(x + bs*0.075, y - bs*0.25)

#画半L型

def typehL(x,y,z):

    if(z=='l'):

        t.penup()

        t.goto(x-bs*0.25, y+bs*0.075)

        t.pendown()

        t.goto(x-bs*0.075, y+bs*0.075)

        t.goto(x - bs*0.075, y + bs*0.25)

        t.penup()

        t.goto(x - bs*0.25, y - bs*0.075)

        t.pendown()

        t.goto(x - bs*0.075, y - bs*0.075)

        t.goto(x - bs*0.075, y - bs*0.25)

    if(z=='r'):

        t.penup()

        t.goto(x + bs*0.25, y + bs*0.075)

        t.pendown()

        t.goto(x + bs*0.075, y + bs*0.075)

        t.goto(x + bs*0.075, y + bs*0.25)

        t.penup()

        t.goto(x + bs*0.25, y - bs*0.075)

        t.pendown()

        t.goto(x + bs*0.075, y - bs*0.075)

        t.goto(x + bs*0.075, y - bs*0.25)

#画横线

p=bs*4.5

while(p>=-bs*4.5):

    line(-bs*4,p,bs*8)

    p=p-bs

any(bs*4,bs*4.5,bs*4,-bs*4.5)

any(-bs*4,bs*4.5,-bs*4,-bs*4.5)

t.right(90)

q=-bs*3

while(q<bs*4):

    line(q,bs*4.5,bs*4)

    q=q+bs

q=-bs*3

while(q<bs*4):

    line(q,-bs*0.5,bs*4)

    q=q+bs

#画斜线

any(-bs,-bs*4.5,bs,-bs*2.5)

any(bs,-bs*4.5,-bs,-bs*2.5)

any(-bs,bs*4.5,bs,bs*2.5)

any(bs,bs*4.5,-bs,bs*2.5)

#画L型

typeL(-bs*2,-bs*1.5)

typeL(0,-bs*1.5)

typeL(bs*2,-bs*1.5)

typeL(-bs*2,bs*1.5)

typeL(0,bs*1.5)

typeL(bs*2,bs*1.5)

typeL(-bs*3,-bs*2.5)

typeL(bs*3,-bs*2.5)

typeL(-bs*3,bs*2.5)

typeL(bs*3,bs*2.5)

typehL(-bs*4,-bs*1.5,'r')

typehL(bs*4,-bs*1.5,'l')

typehL(-bs*4,bs*1.5,'r')

typehL(bs*4,bs*1.5,'l')

turtle.done()

中国象棋源代码blackleft(){ int x,y,n if(blackcurpos.y>0) {blackcurpos.y--x=position[blacktemppos.x][blacktemppos.y].x y=position[blacktemppos.x][blacktemppos.y].y if(board[blacktemppos.x][blacktemppos.y]==0)drawbmp(x,y,boardfile[blacktemppos.x][blacktemppos.y]) else if(!(blacktemppos.x==blackoldpos.x&&blacktemppos.y==blackoldpos.y&&blackstate==MOVE)) {n=board[blacktemppos.x][blacktemppos.y] drawbmp(x,y,chessfile[n]) } if(blacktemppos.x==blackoldpos.x&&blacktemppos.y==blackoldpos.y&&blackstate==MOVE)drawselecursor(blackoldpos) drawcursor(blackcurpos) blacktemppos.x=blackcurpos.x blacktemppos.y=blackcurpos.y }}blackright(){ int x,y,n if(blackcurpos.y<8) {blackcurpos.y++x=position[blacktemppos.x][blacktemppos.y].x y=position[blacktemppos.x][blacktemppos.y].y if(board[blacktemppos.x][blacktemppos.y]==0)drawbmp(x,y,boardfile[blacktemppos.x][blacktemppos.y]) else if(!(blacktemppos.x==blackoldpos.x&&blacktemppos.y==blackoldpos.y&&blackstate==MOVE)) {n=board[blacktemppos.x][blacktemppos.y] drawbmp(x,y,chessfile[n]) } if(blacktemppos.x==blackoldpos.x&&blacktemppos.y==blackoldpos.y&&blackstate==MOVE)drawselecursor(blackoldpos) drawcursor(blackcurpos) blacktemppos.x=blackcurpos.x blacktemppos.y=blackcurpos.y }}blackdo(){ int i,j,x,y,n if(blackstate==SELECT&&blackcanselect()) {if(board[blackcurpos.x][blackcurpos.y]<=BLACK&&board[blackcurpos.x][blackcurpos.y]>0){ blackstate=MOVE drawselecursor(blackcurpos) blackoldpos.x=blackcurpos.x blackoldpos.y=blackcurpos.y } } else if(blackstate==MOVE&&blackcanmove()) {x=position[blackoldpos.x][blackoldpos.y].x y=position[blackoldpos.x][blackoldpos.y].y drawbmp(x,y,boardfile[blackoldpos.x][blackoldpos.y]) x=position[blackcurpos.x][blackcurpos.y].x y=position[blackcurpos.x][blackcurpos.y].y n=board[blackoldpos.x][blackoldpos.y] drawbmp(x,y,chessfile[n]) if(board[blackcurpos.x][blackcurpos.y]==RED_JIANG){ winner=BLACK finish=1 return }board[blackcurpos.x][blackcurpos.y]=n board[blackoldpos.x][blackoldpos.y]=0 for(i=0i<=2i++) for(j=3j<=5j++)if(board[i][j]==BLACK_JIANG) {x=iy=j}for(i=x+1,j=y,n=0i<=9i++){ if(board[i][j]==RED_JIANG&&n==0) {winner=REDfinish=1break} else if(board[i][j]!=0) n++ } turn=RED redstate=SELECT drawcursor(redcurpos) drawbmp(30,438,"bmp\\rzq.wfb") /*转交控制权给红方*/ } }blackundo(){ int x,y,n if(blackstate==MOVE) {x=position[blackoldpos.x][blackoldpos.y].x y=position[blackoldpos.x][blackoldpos.y].y n=board[blackoldpos.x][blackoldpos.y] drawbmp(x,y,chessfile[n]) blackoldpos.x=blackcurpos.x blackoldpos.y=blackcurpos.y drawcursor(blackcurpos) blackstate=SELECT }}/*----------------------------------------------------*/start(){ drawcursor(blackcurpos) drawbmp(30,438,"bmp\\bzq.wfb") while(!finish) {key=getkey() switch(key){ case RED_UP: if(turn==RED) redup() break case RED_DOWN: if(turn==RED) reddown() break case RED_LEFT: if(turn==RED) redleft() break case RED_RIGHT: if(turn==RED) redright() break case RED_DO: if(turn==RED) reddo() break case RED_UNDO: if(turn==RED) redundo() breakcase BLACK_UP: if(turn==BLACK) blackup() break case BLACK_DOWN: if(turn==BLACK) blackdown() break case BLACK_LEFT: if(turn==BLACK) blackleft() break case BLACK_RIGHT: if(turn==BLACK) blackright() break case BLACK_DO:if(turn==BLACK) blackdo() break case BLACK_UNDO:if(turn==BLACK) blackundo() break case ESCAPE: finish=1break } }}main(){ init() initpos() initchessmap() drawbmp(0,0,"bmp\\board.wfb") initdrawchess() /*初始化光标位置*/ redcurpos.x=redoldpos.x=redtemppos.x=9 redcurpos.y=redoldpos.y=redtemppos.y=8 blackcurpos.x=blackoldpos.x=blacktemppos.x=0 blackcurpos.y=blackoldpos.y=blacktemppos.y=0/*开始*/ start() if(winner==RED)drawbmp(200,200,"bmp\\redwin.wfb") else if(winner==BLACK)drawbmp(200,200,"bmp\\blackwin.wfb") elsedrawbmp(200,200,"bmp\\exit.wfb") getch() end()}