請問TImage用draw畫上去後怎麼復原 |
尚未結案
|
huangjulie
一般會員 發表:5 回覆:12 積分:3 註冊:2005-02-23 發送簡訊給我 |
|
yyu10
中階會員 發表:9 回覆:99 積分:96 註冊:2005-02-18 發送簡訊給我 |
达到你想要的效果, 需要用特制的image2和image3. 假设image1中, 棋盘颜色为clYellow, 格线颜色为clRed. 1, 制作黑棋Bitmap(bitmap2) 底色: clBlack
棋子和棋盘重合的部分: clBlack XOR clYellow (棋盘颜色)
棋子和格线重合的部分: clBlack XOR clRed (格线颜色) 2, 制作白棋Bitmap(bitmap3) 底色: clBlack
棋子和棋盘重合的部分: clWhite XOR clYellow (棋盘颜色)
棋子和格线重合的部分: clWhite XOR clRed (格线颜色) 3. 画棋子 下棋:
TBitMap bitmap2, bitmap3; Image1->Canvas->CopyMode = cmSrcInvert; Image1->Canvas->CopyRect( Rect(X, Y, X bitmap2.Width, Y bitmap2.Height), bitmap2.Canvas, Rect(0, 0, bitmap2.Width, bitmap3.Height));退回: 代码同上, 既将棋子在原处重画一遍. _________________________ Programming is a passion |
huangjulie
一般會員 發表:5 回覆:12 積分:3 註冊:2005-02-23 發送簡訊給我 |
|
liangnet
中階會員 發表:19 回覆:148 積分:83 註冊:2004-01-03 發送簡訊給我 |
你是否有配置一個陣列來記錄你的棋盤目前哪個位置有下棋子??
例如: //配置一個陣列來記錄每個棋盤的位置 //棋盤大小 10 x 10 char map[10][10]; //當(1,1) 這個位置資料為0時,表示未下子 map[1][1] = 0; //表示未下子 //當(5,8)這個位置資料為1時,表示下白子 map[5][8] = 1;//表示這個位置有下白子 //當(2,3)這個位置資料為-1時,表示下黑子 map[2][3] = -1;//表示這個位置有下黑子 你要還原時! 1.將map資料還原,你有用list記錄X Y Color, 就將map[x][y] = Color..... 2.將依map的內容重繪棋盤 棋盤重繪的函式大概可以這樣寫… void __fastcall DrawBoard() { //清除畫面 .... //畫格子 ..... for (int y = 0; y < 10; y ) { for (int x = 0; x < 10; x ) { if (map[x][y] == 1) //畫白子 else if (map[x][y] == -1) //畫黑子 } } } |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |