/**************************************************************** TAMMI - peli windowsiin tekijät: Juhola, Markku Pihkanen, Miro versio 1.1 projektiin: tammi.c, tammi.rc, tammi.def, t_uusip.c, apu.c, t_pejaaj.c ALI\t_napula, ALI\tabhand.c, ali\tausta.c, ALI\mdialog.c,ALI\mjonot.c, ******************************************************************/ #define STRICT #include #include #include "tabhand.h" #include "tammi.h" #include "mdialog.h" #include "portable.h" #include "mjonot.h" #include "tausta.h" #include "string.h" #define SEND_COMMAND(id) SEND_WM_COMMAND(msg->hWnd,id,GetDlgItem(msg->hWnd,id),0) /***************************************************************************/ /* Seuraavilla makroilla luodaan dialogin ikkunafunktio ja pääohjelma! */ TDIALOGPROC(MsgTbl,MainDlgProc); mDlgMAIN("PIKA","TAMMI",MainDlgProc); TDIALOGPROC(NEW_Tbl,NEW_Tbl_Func); TDIALOGPROC(NAPPULA_Tbl,NAPPULA_Tbl_Func); TDIALOGPROC(PELAAJA_Tbl,PELAAJA_Tbl_Func); /****************************************************/ /****************************************/ /* globaalit muuttujat */ HICON IKONI; peli_tyyppi peli = { 0,0,0,{TYHJA,TYHJA},"","",0,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0}; nappula_tyyppi nappulat[] = { {"NAPPULA1",NULL}, {"NAPPULA2",NULL}, {"NAPPULA3",NULL}, {"NAPPULA4",NULL}, {"NAPPULA5",NULL}, {"NAPPULA6",NULL}, {"NAPPULA7",NULL}, {"NAPPULA8",NULL}, }; lauta_tyyppi lauta = { 0,0,0,0,0,0,0}; peli_lauta_tyyppi lauta_merkit_r1[8]; peli_lauta_tyyppi lauta_merkit_r2[8]; peli_lauta_tyyppi lauta_merkit_r3[8]; peli_lauta_tyyppi lauta_merkit_r4[8]; peli_lauta_tyyppi lauta_merkit_r5[8]; peli_lauta_tyyppi lauta_merkit_r6[8]; peli_lauta_tyyppi lauta_merkit_r7[8]; peli_lauta_tyyppi lauta_merkit_r8[8]; peli_lauta_tyyppi *osoitin_lautaan[8]; static Undo_tyyppi UNDO; char *vuoroteksti[2] = { "Vuorossa pelaaja 1", "Vuorossa pelaaja 2" }; static int vaihda_vuoro(tMSGParam *msg,int vuoro) { if ( vuoro == 0 ) peli.vuorossa = (peli.vuorossa == 1 ? 2 : 1); else peli.vuorossa = vuoro; SetDlgItemText(msg->hWnd,VUOROSSA,vuoroteksti[peli.vuorossa-1]); return peli.vuorossa; } static LONG lopeta(tMSGParam *msg) { int i; DeleteObject(peli.pel1); DeleteObject(peli.pel2); DeleteObject(peli.hpel1_napp); DeleteObject(peli.hpel2_napp); DeleteObject(peli.hInst); DeleteObject(peli.paa_ikkuna); DeleteObject(peli.hMenu); for(i=0;i< MAX_NAPPULOITA;i++) DeleteObject(nappulat[i].hkuva); WinHelp(msg->hWnd,"TAMMI.HLP",HELP_QUIT,0); tuhoa_siirrot(&UNDO,UNDO.ensimmainen); PostQuitMessage(msg->extra); return 0; } static EVENT UUSI_PELI(tMSGParam *msg) { int tulos,i,j; tulos = MessageBox(msg->hWnd,"Uusi peli.\nVanha peli tuhoutuu!","UUSI PELI" , MB_APPLMODAL | MB_YESNOCANCEL | MB_ICONEXCLAMATION); if (tulos == IDYES ) { for(i = 0; i < lauta.ruutuja_x ;i++) { for (j = 0;j < lauta.ruutuja_y; j++) { osoitin_lautaan[i][j].pelaaja = TYHJA; osoitin_lautaan[i][j].kuningatar = TYHJA; } } for(i = 0; i < 3;i++) { if ( i == 1 ) j =0; else j = 1; for ( ; jhWnd,"UUSI_PELI_DIALOGI",NEW_Tbl_Func); lauta_piirto(msg->hDC); peli.kysyttava = 1; /* näin saadaan oikein alustuksessa */ peli.pel1 = DoModelessDialog(msg->hWnd,"IK_PLR_1",PELAAJA_Tbl_Func); peli.kysyttava = 2; peli.pel2 = DoModelessDialog(msg->hWnd,"IK_PLR_2",PELAAJA_Tbl_Func); SetDlgItemText(peli.pel1 ,PELAAJA1_TEKSTI,peli.pel1_nimi); SetDlgItemText(peli.pel2 ,PELAAJA2_TEKSTI,peli.pel2_nimi); piirra_nappulat(osoitin_lautaan,msg); } return 0; } void PiirraIkoni(HDC hDC) { SelectObject(hDC,GetStockObject(GRAY_BRUSH)); Rectangle(hDC,0,0,40,40); DrawIcon(hDC,2,2,IKONI); } static EVENT WM_paint(tMSGParam *msg) { int piirto_x,piirto_y; if ( IsIconic(msg->hWnd) ) PiirraIkoni(msg->hDC); if ( peli.peli_kaynnissa == KAYNTIIN ) { lauta_piirto(msg->hDC); if ( peli.siirto.x != TYHJA) { piirto_x = lauta.siirto_vas_reunasta + peli.siirto.x * lauta.koko; piirto_y = lauta.siirto_ylhaalta + peli.siirto.y * lauta.koko; piirra_merkki(piirto_x,piirto_y,lauta.koko,msg->hDC); } piirra_nappulat(osoitin_lautaan,msg); } return 0; } static EVENT WM_intdialog(tMSGParam *msg) { int i,leveys,korkeus,tulos; HDC hic; Siirto_tyyppi alku={TYHJA,TYHJA,{TYHJA,TYHJA},{TYHJA,TYHJA},{TYHJA,TYHJA},NULL,NULL}, *uusi_siirto; HBITMAP hbitti; uusi_siirto = (Siirto_tyyppi*)malloc(sizeof(Siirto_tyyppi)); if (uusi_siirto == NULL ) return msg->extra; /* alustetaan undo_tyyppi */ alku.seuraava = uusi_siirto; UNDO.ensimmainen = uusi_siirto; UNDO.kasiteltava = uusi_siirto; *uusi_siirto = alku; hic = CreateIC("DISPLAY",NULL,NULL,NULL); leveys = GetDeviceCaps(hic,HORZRES); korkeus = GetDeviceCaps(hic,VERTRES); DeleteDC(hic); lauta.korkeus = korkeus; lauta.leveys=leveys; lauta.ruutuja_x = lauta.ruutuja_y = 8; lauta.koko = korkeus* 0.7 / 8; lauta.siirto_ylhaalta = (korkeus - korkeus *0.9) /2; lauta.siirto_vas_reunasta = (leveys - leveys*0.7)/2; MoveWindow(msg->hWnd,5,5, leveys* 0.9,korkeus * 0.9,NULL); peli.hInst = GetWindowInstance(msg->hWnd) ; peli.hMenu = GetMenu(msg->hWnd); peli.paa_ikkuna = msg->hWnd; IKONI = LoadIcon(peli.hInst,"IKONI"); for( i = 0 ; i < MAX_NAPPULOITA; i++) { hbitti = LoadBitmap(peli.hInst,nappulat[i].nimi); nappulat[i].hkuva=hbitti; } osoitin_lautaan[0] = lauta_merkit_r1; osoitin_lautaan[1] = lauta_merkit_r2; osoitin_lautaan[2] = lauta_merkit_r3; osoitin_lautaan[3] = lauta_merkit_r4; osoitin_lautaan[4] = lauta_merkit_r5; osoitin_lautaan[5] = lauta_merkit_r6; osoitin_lautaan[6] = lauta_merkit_r7; osoitin_lautaan[7] = lauta_merkit_r8; tulos = lue_peli(osoitin_lautaan); CreateWindow("Static","Valitse Game/New", WS_BORDER | WS_CHILD | WS_VISIBLE, lauta.siirto_vas_reunasta,lauta.siirto_ylhaalta/4,lauta.koko*4,lauta.siirto_ylhaalta /2 ,msg->hWnd,(HMENU)(VUOROSSA),peli.hInst,NULL); if ( tulos == 1 ){ /* ladattiin uusi peli */ tulos = MessageBox(msg->hWnd,"Löytyi talletettu pelitilanne.\nLadataanko muistiin","LOAD" , MB_APPLMODAL | MB_YESNOCANCEL | MB_ICONEXCLAMATION); if ( tulos == IDYES ) { vaihda_vuoro(msg,peli.vuorossa); peli.kysyttava = 1; /* näin saadaan oikein alustuksessa */ peli.pel1 = DoModelessDialog(msg->hWnd,"IK_PLR_1",PELAAJA_Tbl_Func); peli.kysyttava = 2; peli.pel2 = DoModelessDialog(msg->hWnd,"IK_PLR_2",PELAAJA_Tbl_Func); SetDlgItemText(peli.pel1 ,PELAAJA1_TEKSTI,peli.pel1_nimi); SetDlgItemText(peli.pel2 ,PELAAJA2_TEKSTI,peli.pel2_nimi); piirra_nappulat(osoitin_lautaan,msg); peli.peli_kaynnissa = KAYNTIIN; return 0; } } return 0; } static EVENT WM_command_laudan_vari(tMSGParam *msg) { peli.laudan_vari = msg->extra - 150; InvalidateRect(msg->hWnd,NULL,FALSE); return 0; } static EVENT WM_command_NAPPULA(tMSGParam *msg) { if ( peli.peli_kaynnissa == KAYNTIIN ) { peli.kysyttava = msg->extra - CM_PLAYER1BUTT + 1 ; DoModalDialog(msg->hWnd,"DGL_NAPP",NAPPULA_Tbl_Func); } InvalidateRect(msg->hWnd,NULL,FALSE); return 0; } static int jatka=0; static EVENT WM_command_LBUTTONDOWN(tMSGParam *msg) { POINTS piste = MAKEPOINTS(msg->lParam); Siirto_tyyppi *uusi_siirto; int y; piste.x = piste.x - lauta.siirto_vas_reunasta; piste.y = piste.y - lauta.siirto_ylhaalta; piste = etsi(&piste); if (piste.x == -6 ) return msg->extra; if ( peli.siirto.x == TYHJA ) { if ( osoitin_lautaan[piste.y][piste.x].pelaaja == peli.vuorossa ) { peli.siirto.x = piste.x; peli.siirto.y = piste.y; InvalidateRect(msg->hWnd,NULL,FALSE); return 0; } return msg->extra; } /* loppupisteessä on joku nappula */ if(osoitin_lautaan[piste.y][piste.x].pelaaja != TYHJA ) { if (jatka==0) peli.siirto.x = TYHJA; InvalidateRect(msg->hWnd,NULL,FALSE); return 0; } /* kuningataren siirtojen tarkastus*/ if( osoitin_lautaan[peli.siirto.y][peli.siirto.x].kuningatar == 1 ) { if ( peli.vuorossa == 1 && abs(peli.siirto.x-piste.x) == 2 && abs(peli.siirto.y-piste.y) == 2 ){ jatka=0; if ((peli.siirto.y > 1 && osoitin_lautaan[peli.siirto.y-1] [peli.siirto.x+(piste.x-peli.siirto.x)/2].pelaaja != 2) && (peli.siirto.y < 7 && osoitin_lautaan[peli.siirto.y+1] [peli.siirto.x+(piste.x-peli.siirto.x)/2].pelaaja != 2)) { if (jatka == 0) peli.siirto.x = TYHJA; InvalidateRect(msg->hWnd,NULL,FALSE); return 0; } if ( piste.x < 6 && piste.y > 1){ if ( osoitin_lautaan[piste.y-1][piste.x+1].pelaaja == 2 && osoitin_lautaan[piste.y-2][piste.x+2].pelaaja == TYHJA) jatka = 1; } if ( piste.x > 1 && piste.y > 1){ if ( osoitin_lautaan[piste.y-1][piste.x-1].pelaaja == 2 && osoitin_lautaan[piste.y-2][piste.x-2].pelaaja == TYHJA) jatka = 1; } if ( piste.x < 6 && piste.y < 6){ if ( osoitin_lautaan[piste.y+1][piste.x+1].pelaaja == 2 && osoitin_lautaan[piste.y+2][piste.x+2].pelaaja == TYHJA) jatka = 1; } if ( piste.x > 1 && piste.y < 6){ if ( osoitin_lautaan[piste.y+1][piste.x-1].pelaaja == 2 && osoitin_lautaan[piste.y+2][piste.x-2].pelaaja == TYHJA) jatka = 1; } if(piste.y > peli.siirto.y) y=piste.y-1; if(piste.y < peli.siirto.y) y=piste.y+1; uusi_siirto = Sijoita_siirto(osoitin_lautaan,piste); uusi_siirto->syoty.x = piste.x+(peli.siirto.x-piste.x)/2; uusi_siirto->syoty.y = y; uusi_siirto->syoty_kuningatar = osoitin_lautaan[uusi_siirto->syoty.y] [uusi_siirto->syoty.x].kuningatar; osoitin_lautaan[uusi_siirto->syoty.y] [uusi_siirto->syoty.x].pelaaja =TYHJA; osoitin_lautaan[uusi_siirto->syoty.y] [uusi_siirto->syoty.x].kuningatar = 0; lisaa_siirto(&UNDO,uusi_siirto); if (jatka == 1) { peli.siirto.x = piste.x; peli.siirto.y = piste.y; InvalidateRect(msg->hWnd,NULL,FALSE); return 0; } jatka = 0; vaihda_vuoro(msg,0); peli.siirto.x = TYHJA; InvalidateRect(msg->hWnd,NULL,FALSE); return 0; } if ( peli.vuorossa == 2 && abs(peli.siirto.x-piste.x) == 2 && abs(peli.siirto.y-piste.y) == 2){ jatka=0; if (( peli.siirto.y < 7 && osoitin_lautaan[peli.siirto.y+1] [peli.siirto.x+(piste.x-peli.siirto.x)/2].pelaaja != 1)&& ( peli.siirto.y > 1 && osoitin_lautaan[peli.siirto.y-1] [peli.siirto.x+(piste.x-peli.siirto.x)/2].pelaaja != 1 )) { if (jatka == 0) peli.siirto.x = TYHJA; InvalidateRect(msg->hWnd,NULL,FALSE); return 0; } if ( piste.x < 6 && piste.y < 6){ if ( osoitin_lautaan[piste.y+1][piste.x+1].pelaaja == 1 && osoitin_lautaan[piste.y+2][piste.x+2].pelaaja == TYHJA) jatka = 1; } if ( piste.x > 1 && piste.y < 6){ if ( osoitin_lautaan[piste.y+1][piste.x-1].pelaaja == 1 && osoitin_lautaan[piste.y+2][piste.x-2].pelaaja == TYHJA) jatka = 1; } if ( piste.x < 6 && piste.y > 1){ if ( osoitin_lautaan[piste.y-1][piste.x+1].pelaaja == 1 && osoitin_lautaan[piste.y-2][piste.x+2].pelaaja == TYHJA) jatka = 1; } if ( piste.x > 1 && piste.y >1 ){ if ( osoitin_lautaan[piste.y-1][piste.x-1].pelaaja == 1 && osoitin_lautaan[piste.y-2][piste.x-2].pelaaja == TYHJA) jatka = 1; } if(piste.y > peli.siirto.y) y=piste.y-1; if(piste.y < peli.siirto.y) y=piste.y+1; uusi_siirto = Sijoita_siirto(osoitin_lautaan,piste); uusi_siirto->syoty.x = piste.x+(peli.siirto.x-piste.x)/2; uusi_siirto->syoty.y = y; uusi_siirto->syoty_kuningatar = osoitin_lautaan[uusi_siirto->syoty.y] [uusi_siirto->syoty.x].kuningatar; osoitin_lautaan[uusi_siirto->syoty.y] [uusi_siirto->syoty.x].pelaaja =TYHJA; osoitin_lautaan[uusi_siirto->syoty.y] [uusi_siirto->syoty.x].kuningatar = 0; lisaa_siirto(&UNDO,uusi_siirto); if (jatka == 1) { peli.siirto.x = piste.x; peli.siirto.y = piste.y; InvalidateRect(msg->hWnd,NULL,FALSE); return 0; } jatka = 0; vaihda_vuoro(msg,0); peli.siirto.x = TYHJA; InvalidateRect(msg->hWnd,NULL,FALSE); return 0; } /* Kuningattaren tavalliset siirrot */ if( peli.vuorossa == 1 || peli.vuorossa == 2){ if ( abs(peli.siirto.x - piste.x) != 1 || abs(peli.siirto.y - piste.y) != 1){ if (UNDO.kasiteltava->syoty.x == TYHJA) peli.siirto.x = TYHJA; InvalidateRect(msg->hWnd,NULL,FALSE); return 0; } } /* siirot hyväksyttävä kuningatar */ EnableMenuItem(peli.hMenu,CM_UNDO,MF_BYCOMMAND | MF_ENABLED); if(jatka == 1) { InvalidateRect(msg->hWnd,NULL,FALSE); return 0; } uusi_siirto = Sijoita_siirto(osoitin_lautaan,piste); uusi_siirto->syoty.x = TYHJA; uusi_siirto->syoty.y = TYHJA; lisaa_siirto(&UNDO,uusi_siirto); vaihda_vuoro(msg,0); peli.siirto.x = TYHJA; free(uusi_siirto); InvalidateRect(msg->hWnd,NULL,FALSE); return 0; } /* syönnin tarkastus */ if ( peli.vuorossa == 1 && (abs(peli.siirto.x-piste.x) == 2) && (peli.siirto.y-piste.y) == 2 ){ jatka=0; if ( osoitin_lautaan[peli.siirto.y-1] [peli.siirto.x+(piste.x-peli.siirto.x)/2].pelaaja != 2 ) { if (jatka == 0) peli.siirto.x = TYHJA; InvalidateRect(msg->hWnd,NULL,FALSE); return 0; } if ( piste.x < 6 && piste.y >= 2){ if ( osoitin_lautaan[piste.y-1][piste.x+1].pelaaja == 2 && osoitin_lautaan[piste.y-2][piste.x+2].pelaaja == TYHJA) jatka = 1; } if ( piste.x > 1 && piste.y >= 2){ if ( osoitin_lautaan[piste.y-1][piste.x-1].pelaaja == 2 && osoitin_lautaan[piste.y-2][piste.x-2].pelaaja == TYHJA) jatka = 1; } y = piste.y+1; if ( piste.y == 0 || piste.y == 7 ) osoitin_lautaan[piste.y][piste.x].kuningatar = 1; uusi_siirto = Sijoita_siirto(osoitin_lautaan,piste); uusi_siirto->syoty.x = piste.x+(peli.siirto.x-piste.x)/2; uusi_siirto->syoty.y = y; uusi_siirto->syoty_kuningatar = osoitin_lautaan[uusi_siirto->syoty.y] [uusi_siirto->syoty.x].kuningatar; osoitin_lautaan[uusi_siirto->syoty.y] [uusi_siirto->syoty.x].pelaaja =TYHJA; osoitin_lautaan[uusi_siirto->syoty.y] [uusi_siirto->syoty.x].kuningatar = 0; EnableMenuItem(peli.hMenu,CM_REDO,MF_BYCOMMAND | MF_GRAYED); lisaa_siirto(&UNDO,uusi_siirto); if ( piste.y == 0 || piste.y == 7 ) /* silloin nappula ylenee */ osoitin_lautaan[piste.y][piste.x].kuningatar = 1; if (jatka == 1) { peli.siirto.x = piste.x; peli.siirto.y = piste.y; InvalidateRect(msg->hWnd,NULL,FALSE); return 0; } jatka = 0; vaihda_vuoro(msg,0); peli.siirto.x = TYHJA; InvalidateRect(msg->hWnd,NULL,FALSE); return 0; } if(peli.vuorossa == 2 && abs(peli.siirto.x-piste.x) == 2 && (peli.siirto.y-piste.y) == -2 ){ jatka=0; if ( osoitin_lautaan[peli.siirto.y+1] [peli.siirto.x+(piste.x-peli.siirto.x)/2].pelaaja != 1 ) { if ( jatka ==0 ) peli.siirto.x = TYHJA; InvalidateRect(msg->hWnd,NULL,FALSE); return 0; } if ( piste.x < 6 && piste.y < 6){ if ( osoitin_lautaan[piste.y+1][piste.x+1].pelaaja == 1 && osoitin_lautaan[piste.y+2][piste.x+2].pelaaja == TYHJA) jatka = 1; } if ( piste.x > 1 && piste.y < 6){ if ( osoitin_lautaan[piste.y+1][piste.x-1].pelaaja == 1 && osoitin_lautaan[piste.y+2][piste.x-2].pelaaja == TYHJA) jatka = 1; } y = piste.y-1; uusi_siirto = Sijoita_siirto(osoitin_lautaan,piste); uusi_siirto->syoty.x = piste.x+(peli.siirto.x-piste.x)/2; uusi_siirto->syoty.y = y; uusi_siirto->syoty_kuningatar = osoitin_lautaan[uusi_siirto->syoty.y] [uusi_siirto->syoty.x].kuningatar; osoitin_lautaan[uusi_siirto->syoty.y] [uusi_siirto->syoty.x].pelaaja =TYHJA; osoitin_lautaan[uusi_siirto->syoty.y] [uusi_siirto->syoty.x].kuningatar = 0; EnableMenuItem(peli.hMenu,CM_REDO,MF_BYCOMMAND | MF_GRAYED); lisaa_siirto(&UNDO,uusi_siirto); if ( piste.y == 0 || piste.y == 7 ) /* silloin nappula ylenee */ osoitin_lautaan[piste.y][piste.x].kuningatar = 1; if (jatka == 1) { peli.siirto.x = piste.x; peli.siirto.y = piste.y; InvalidateRect(msg->hWnd,NULL,FALSE); return 0; } jatka = 0; vaihda_vuoro(msg,0); peli.siirto.x = TYHJA; InvalidateRect(msg->hWnd,NULL,FALSE); return 0; } /* muun liikkumisen tarkistus */ if( peli.vuorossa == 1){ if ( abs(peli.siirto.x - piste.x) != 1 || peli.siirto.y - piste.y != 1){ if (UNDO.kasiteltava->syoty.x == TYHJA) peli.siirto.x = TYHJA; InvalidateRect(msg->hWnd,NULL,FALSE); return 0; } } else { if ( abs(peli.siirto.x - piste.x) != 1 || peli.siirto.y - piste.y != -1){ if (UNDO.kasiteltava->syoty.x == TYHJA) peli.siirto.x = TYHJA; InvalidateRect(msg->hWnd,NULL,FALSE); return 0; } } /* siirot huväksyttävä */ EnableMenuItem(peli.hMenu,CM_UNDO,MF_BYCOMMAND | MF_ENABLED); EnableMenuItem(peli.hMenu,CM_REDO,MF_BYCOMMAND | MF_GRAYED); if(jatka == 1) { InvalidateRect(msg->hWnd,NULL,FALSE); return 0; } uusi_siirto = Sijoita_siirto(osoitin_lautaan,piste); uusi_siirto->syoty.x = TYHJA; uusi_siirto->syoty.y = TYHJA; lisaa_siirto(&UNDO,uusi_siirto); if ( piste.y == 0 || piste.y == 7 ) /* silloin nappula ylenee */ osoitin_lautaan[piste.y][piste.x].kuningatar = 1; vaihda_vuoro(msg,0); peli.siirto.x = TYHJA; free(uusi_siirto); InvalidateRect(msg->hWnd,NULL,FALSE); return 0; } static EVENT WM_command_about(tMSGParam *msg) { MessageBox(msg->hWnd,"MEGA k00l Game\nMade for you\nMake & Miro\n1994", "Tammi" ,MB_APPLMODAL | MB_OK | MB_ICONEXCLAMATION); return 0; } static EVENT WM_command_helpcont(tMSGParam *msg) { return WinHelp(msg->hWnd,"TAMMI.HLP",HELP_INDEX,0); } static EVENT WM_command_CM_UNDO(tMSGParam *msg) { EnableMenuItem(peli.hMenu,CM_REDO,MF_BYCOMMAND | MF_ENABLED); osoitin_lautaan[UNDO.kasiteltava->alku.y][UNDO.kasiteltava->alku.x].pelaaja = UNDO.kasiteltava->pelaaja; osoitin_lautaan[UNDO.kasiteltava->alku.y][UNDO.kasiteltava->alku.x].kuningatar = osoitin_lautaan[UNDO.kasiteltava->loppu.y][UNDO.kasiteltava->loppu.x].kuningatar; osoitin_lautaan[UNDO.kasiteltava->loppu.y][UNDO.kasiteltava->loppu.x].pelaaja = osoitin_lautaan[UNDO.kasiteltava->loppu.y][UNDO.kasiteltava->loppu.x].kuningatar = TYHJA; if ( UNDO.kasiteltava->syoty.x != TYHJA ) { if ( UNDO.kasiteltava->pelaaja == 1 ) { osoitin_lautaan[UNDO.kasiteltava->syoty.y][UNDO.kasiteltava->syoty.x].pelaaja = 2; osoitin_lautaan[UNDO.kasiteltava->syoty.y][UNDO.kasiteltava->syoty.x].kuningatar = UNDO.kasiteltava->syoty_kuningatar; } else { osoitin_lautaan[UNDO.kasiteltava->syoty.y][UNDO.kasiteltava->syoty.x].pelaaja = 1; osoitin_lautaan[UNDO.kasiteltava->syoty.y][UNDO.kasiteltava->syoty.x].kuningatar = UNDO.kasiteltava->syoty_kuningatar; } } siirtely(&UNDO,TAAKSEPAIN); if ( UNDO.ensimmainen == UNDO.kasiteltava ) EnableMenuItem(peli.hMenu,CM_UNDO,MF_BYCOMMAND | MF_GRAYED); vaihda_vuoro(msg,UNDO.kasiteltava->seuraava->pelaaja); InvalidateRect(msg->hWnd,NULL,FALSE); return 0; } static EVENT WM_command_CM_REDO(tMSGParam *msg) { osoitin_lautaan[UNDO.kasiteltava->seuraava->loppu.y] [UNDO.kasiteltava->seuraava->loppu.x].pelaaja = UNDO.kasiteltava->seuraava->pelaaja; osoitin_lautaan[UNDO.kasiteltava->seuraava->loppu.y] [UNDO.kasiteltava->seuraava->loppu.x].kuningatar = osoitin_lautaan[UNDO.kasiteltava->seuraava->alku.y] [UNDO.kasiteltava->seuraava->alku.x].kuningatar; if (UNDO.kasiteltava->seuraava->syoty.y != TYHJA ) { osoitin_lautaan[UNDO.kasiteltava->seuraava->syoty.y] [UNDO.kasiteltava->seuraava->syoty.x].pelaaja = TYHJA; osoitin_lautaan[UNDO.kasiteltava->seuraava->syoty.y] [UNDO.kasiteltava->seuraava->syoty.x].kuningatar=TYHJA; vaihda_vuoro(msg,UNDO.kasiteltava->seuraava->pelaaja); } osoitin_lautaan[UNDO.kasiteltava->seuraava->alku.y][UNDO.kasiteltava->seuraava->alku.x].pelaaja = TYHJA; osoitin_lautaan[UNDO.kasiteltava->seuraava->alku.y][UNDO.kasiteltava->seuraava->alku.x].kuningatar= TYHJA ; if ( UNDO.kasiteltava->seuraava->pelaaja == 1) vaihda_vuoro(msg,2); else vaihda_vuoro(msg,1); siirtely(&UNDO,ETEENPAIN); if ( UNDO.ensimmainen == UNDO.kasiteltava->seuraava ) EnableMenuItem(peli.hMenu,CM_REDO,MF_BYCOMMAND | MF_GRAYED); EnableMenuItem(peli.hMenu,CM_UNDO,MF_BYCOMMAND | MF_ENABLED); InvalidateRect(msg->hWnd,NULL,FALSE); return 0; } static EVENT WM_command_CM_GAMESAVE(tMSGParam *msg) { int tulos; tulos = MessageBox(msg->hWnd,"Talletus\npeli tallennetaan nimelle\ntammi.sav","SAVE" , MB_APPLMODAL | MB_YESNOCANCEL | MB_ICONEXCLAMATION); if ( tulos == IDYES ) { tallenna_peli(osoitin_lautaan,msg); } return msg->extra; } static tMSGEntry MsgTbl[] = { { WM_DESTROY,DoC,DoC,lopeta,0,0}, { WM_CLOSE,DoC,DoC,lopeta,0,0}, { WM_LBUTTONDOWN,DoC,DoC,WM_command_LBUTTONDOWN,MAKE_DC}, { WM_INITDIALOG ,DoC , DoC, WM_intdialog}, { WM_PAINT, DoC , DoC, WM_paint,MAKE_DC}, { WM_COMMAND, CM_NEW, DoC, UUSI_PELI, MAKE_DC}, { WM_COMMAND, CM_EXIT, DoC, lopeta, 0, 0}, { WM_COMMAND, TRANGE, DoC, WM_command_laudan_vari ,0,SAME_AS_W,CM_BOARDBW,CM_BOARDBY}, { WM_COMMAND, CM_HELPCONT, DoC,WM_command_helpcont, 0, 0}, { WM_COMMAND, CM_ABTAM, DoC,WM_command_about, 0, 0}, { WM_COMMAND, CM_GAMESAVE, DoC, WM_command_CM_GAMESAVE}, { WM_COMMAND, CM_UNDO, DoC, WM_command_CM_UNDO, 0, 0}, { WM_COMMAND, CM_REDO, DoC, WM_command_CM_REDO, 0, 0}, { WM_COMMAND, TRANGE , DoC,WM_command_NAPPULA,0, SAME_AS_W,CM_PLAYER1BUTT,CM_PLAYER2BUTT}, { 0 } };