160 likes | 274 Views
โปรแกรมประยุกต์อื่นๆ. 259201 Computer Programming for Engineers (Week 13). Outline. ตัวอย่างเกม OX ส่วนวาดภาพ ส่วนรับอินพุต ส่วนตรวจสอบการแพ้ชนะ ส่วนสลับกันเล่น. ตัวอย่างเกม OX. เริ่มต้น - ตารางเปล่า สลับกันเล่น ระบุตำแหน่ง ตรวจสอบการแพ้ชนะ วาดตารางใหม่ จนกว่าจะจบเกม. O. X.
E N D
โปรแกรมประยุกต์อื่นๆ 259201 Computer Programming for Engineers (Week 13)
Outline • ตัวอย่างเกม OX • ส่วนวาดภาพ • ส่วนรับอินพุต • ส่วนตรวจสอบการแพ้ชนะ • ส่วนสลับกันเล่น
ตัวอย่างเกม OX • เริ่มต้น - ตารางเปล่า • สลับกันเล่น • ระบุตำแหน่ง • ตรวจสอบการแพ้ชนะ • วาดตารางใหม่ • จนกว่าจะจบเกม O X O X
วาดตาราง • Input/Output? • ตัวแปรแบบ 2 มิติเก็บตาราง OX ประกาศใน main • Output ออกมาเป็นค่า? • วาดตารางอย่างไร? • ตัวแปรมีกี่สถานะ? 1 ช่องจากตัวแปร 1 ช่องจาก “|” ช่องว่าง 1 ช่องจาก “_” 1 ช่องจาก “+”
ส่วนวาดภาพ • Q1: จงเขียนโปรแกรมที่มีรายละเอียดดังต่อไปนี้ • ประกาศตัวแปรอาเรย์ขนาดสองมิติขนาด 3x3 • กำหนดให้ค่าเริ่มต้นของตัวแปรดังกล่าวคือ 0 • สุ่มค่าใดๆ ในตัวแปรดังกล่าวให้อยู่ในช่วง 0 - 2 • ให้เขียนฟังก์ชันที่วาดตารางโดยนำค่าตัวแปรอาเรย์มาใช้ • หากค่าในอาเรย์เป็น 1 วาด O • หากค่าในอาเรย์เป็น 2 วาด X • หากค่าในอาเรย์เป็น 0 วาดช่องว่าง • เรียกใช้ฟังก์ชันดังกล่าว
q1.c void print_tbl(inttbl[3][3]) { inti, j; for (i=0; i<3; i++) { for (j=0; j<3; j++) { printf(" "); if (tbl[i][j]==1) printf("o"); else if (tbl[i][j]==2) printf("x"); else printf(" "); printf(" "); if (j!=2) printf("|"); } printf("\n"); if (i!=2) printf("---+---+---\n"); } } #include<stdio.h> void print_tbl(int [3][3]); void main(void) { int table[3][3]={0,0,0,0,0,0,0,0,0}; inti, j; for (i=0; i<3; i++) for(j=0; j<3; j++) table[i][j] = rand()%3; print_tbl(table); }
ส่วนรับอินพุต • การรับอินพุตจะรับผ่าน Coordinate ดังต่อไปนี้ • รับทีละค่าเริ่มจากตำแหน่งแถวก่อน ตามด้วยหลัก 0,0 0,1 0,2 1,0 1,1 1,2 2,0 2,1 2,2
ส่วนรับอินพุต (Cont.) • Q2: จงแก้ไขโปรแกรมจาก Q1 โดยให้เพิ่มเติมการรับอินพุตสำหรับผู้เล่น O หนึ่งครั้งต่อท้าย Code เดิม ดังตังอย่างต่อไปนี้ • Enter O horizontal axis: 1 • Enter O vertical axis: 0 • ถ้าตำแหน่งดังกล่าวมี O หรือ X ไว้แล้ว ให้วนซ้ำจนกว่าผู้ใช้จะกรอกค่าถูก O X O O X
q2.c void print_tbl(inttbl[3][3]) { inti, j; for (i=0; i<3; i++) { for (j=0; j<3; j++) { printf(" "); if (tbl[i][j]==1) printf("o"); else if (tbl[i][j]==2) printf("x"); else printf(" "); printf(" "); if (j!=2) printf("|"); } printf("\n"); if (i!=2) printf("---+---+---\n"); } } #include<stdio.h> void print_tbl(int [3][3]); void main(void) { int table[3][3]={0,0,0,0,0,0,0,0,0}; inti, j; int h, v; for (i=0; i<3; i++) for(j=0; j<3; j++) table[i][j] = rand()%3; print_tbl(table); do { printf("Enter o horizontal axis: "); scanf("%d", &h); printf("Enter o vertical axis: "); scanf("%d", &v); }while(table[h][v]==1||table[h][v]==2); table[h][v]=1; print_tbl(table); }
ส่วนตรวจสอบการแพ้ชนะ • ตัวอย่างการแพ้ชนะ O X O O X X X X O O
ส่วนตรวจสอบการแพ้ชนะ (Cont.) • แนวนอน • แนวตั้ง • แนวทะแยงมุม
ส่วนตรวจสอบการแพ้ชนะ (Cont.) • Q3: จงเขียนโปรแกรมที่มีรายละเอียดดังต่อไปนี้ • ประกาศตัวแปรอาเรย์ขนาดสองมิติขนาด 3x3 • กำหนดให้ค่าเริ่มต้นของตัวแปรดังกล่าวคือ 0 • ให้เขียนฟังก์ชันตรวจสอบการแพ้ชนะในแนวนอนที่แถวที่ 0 • ส่งค่า 0 กลับหากไม่มีการแพ้ชนะ • ส่งค่า 1 กลับหาก o ชนะ • ส่งค่า 2 กลับหาก x ชนะ • ให้สมมุติค่าเพื่อทดสอบฟังก์ชันดังกล่าวในโค๊ด
q3.c // ส่วนไหนยังไม่ใช้ สามารถ comment ไว้ก่อนได้ intcheck_winning(inttbl[3][3]) { if (tbl[0][0]==1 &&tbl[0][1]==1 &&tbl[0][2]==1) return 1; else if (tbl[0][0]==2 &&tbl[0][1]==2 &&tbl[0][2]==2) return 2; else return 0; } #include<stdio.h> void print_tbl(int [3][3]); intcheck_winning(int [3][3]); void main(void) { int table[3][3]={0,0,0,0,0,0,0,0,0}; int winner = 0; table[0][0]=1; table[0][1]=1; table[0][2]=1; print_tbl(table); while (winner==0) { winner = check_winning(table); } if (winner==1) printf("O win\n"); else if (winner==2) printf("X win\n"); }
ส่วนสลับกันเล่น • สร้างตัวแปรสำหรับเก็บผู้เล่นปัจจุบัน • 0 สำหรับผู้เล่น o • 1 สำหรับผู้เล่น x • สลับกันโดยใช้การประมวลผลนิพจน์ทางตรรกศาสตร์ • !0 -> 1 • !1 -> 0
ส่วนสลับกันเล่น (Cont.) • Q4:จงแก้ไขโปรแกรมจาก Q2 และ Q3 เพื่อให้ผู้ใช้สามารถเล่นเกม OX ได้โดยมีลักษณะต่อไปนี้ • เริ่มต้นด้วยตารางว่าง • สลับกันเล่นได้ โดยเริ่มจาก o ก่อน • สามารถป้อนตำแหน่งการใส่ o หรือ x ได้ โดยห้ามใส่ทับตำแหน่งที่มีค่า o หรือ x หากใส่ทับให้ใส่ใหม่เรื่อยๆ • สามารถตรวจสอบการแพ้ชนะในแนวนอน แถวที่ 0 ได้
q4.c winner = check_winning(table); player=!player; printf("\n"); print_tbl(table); } if (winner==1) printf("O win!\n"); else if (winner==2) printf("X win!\n"); } #include<stdio.h> void print_tbl(int [3][3]); intcheck_winning(int [3][3]); void main(void) { int table[3][3]={0,0,0,0,0,0,0,0,0}; int h, v, winner = 0, player=0; print_tbl(table); while (winner==0) { if (player==0) { do { printf("Enter o horizontal axis: "); scanf("%d", &h); printf("Enter o vertical axis: "); scanf("%d", &v); } while(table[h][v]==1||table[h][v]==2); table[h][v]=1; } else { do { printf("Enter x horizontal axis: "); scanf("%d", &h); printf("Enter x vertical axis: "); scanf("%d", &v); } while ( (table[h][v]==1||table[h][v]==2); table[h][v]=2; }