Upload
kay
View
32
Download
1
Embed Size (px)
DESCRIPTION
โปรแกรมประยุกต์อื่นๆ. 259201 Computer Programming for Engineers (Week 13). Outline. ตัวอย่างเกม OX ส่วนวาดภาพ ส่วนรับอินพุต ส่วนตรวจสอบการแพ้ชนะ ส่วนสลับกันเล่น. ตัวอย่างเกม OX. เริ่มต้น - ตารางเปล่า สลับกันเล่น ระบุตำแหน่ง ตรวจสอบการแพ้ชนะ วาดตารางใหม่ จนกว่าจะจบเกม. O. X. - PowerPoint PPT Presentation
Citation preview
โปรแกรมประยุกต์�อื่ �นๆ
259201 Computer Programming for Engineers (Week 13)
Outline
• ต์�วอื่ยุ�างเกม OX• ส่�วนวาดภาพ• ส่�วนร�บอื่�นพต์• ส่�วนต์รวจส่อื่บการแพ�ชนะ• ส่�วนส่ลั�บก�นเลั�น
ต์�วอื่ยุ�างเกม OX
O
O
X
X
• เร��มต์�น - ต์ารางเปลั�า• ส่ลั�บก�นเลั�น• ระบต์"าแหน�ง• ต์รวจส่อื่บการแพ�ชนะ• วาดต์ารางใหม�• จนกว�าจะจบเกม
วาดต์าราง
• Input/Output?–ต์�วแปรแบบ 2 ม�ต์�เก%บต์าราง OX ประกาศใน
main–Output อื่อื่กมาเป'นค่�า?
• วาดต์ารางอื่ยุ�างไร?• ต์�วแปรม*ก*�ส่ถานะ?
1 ช�อื่งจากต์�วแปร
1 ช�อื่งจาก “|”
1 ช�อื่งจาก “_”
1 ช�อื่งจาก “+”
ช�อื่งว�าง
ส่�วนวาดภาพ• Q1: จงเขี*ยุนโปรแกรมที่*�ม*รายุลัะเอื่*ยุดด�งต์�อื่ไปน*.– ประกาศต์�วแปรอื่าเรยุ�ขีนาดส่อื่งม�ต์�ขีนาด 3x3– ก"าหนดให�ค่�าเร��มต์�นขีอื่งต์�วแปรด�งกลั�าวค่ อื่ 0– ส่�มค่�าใดๆ ในต์�วแปรด�งกลั�าวให�อื่ยุ/�ในช�วง 0 - 2– ให�เขี*ยุนฟั1งก�ช�นที่*�วาดต์ารางโดยุน"าค่�าต์�วแปรอื่าเรยุ�มา
ใช� • หากค่�าในอื่าเรยุ�เป'น 1 วาด O • หากค่�าในอื่าเรยุ�เป'น 2 วาด X• หากค่�าในอื่าเรยุ�เป'น 0 วาดช�อื่งว�าง
– เร*ยุกใช�ฟั1งก�ช�นด�งกลั�าว
q1.c#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};int i, j;
for (i=0; i<3; i++) for(j=0; j<3; j++) table[i][j] = rand()%3;
print_tbl(table);
}
void print_tbl(int tbl[3][3]) {int i, 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");}
}
ส่�วนร�บอื่�นพต์
• การร�บอื่�นพต์จะร�บผ่�าน Coordinate ด�งต์�อื่ไปน*.
• ร�บที่*ลัะค่�าเร��มจากต์"าแหน�งแถวก�อื่น ต์ามด�วยุหลั�ก
2,0 2,1
1,0 1,1
0,0 0,1
2,2
1,2
0,2
ส่�วนร�บอื่�นพต์ (Cont.)
• Q2: จงแก�ไขีโปรแกรมจาก Q1 โดยุให�เพ��มเต์�มการร�บอื่�นพต์ส่"าหร�บผ่/�เลั�น O หน3�งค่ร�.ง ต์�อื่ที่�ายุ Code เด�ม ด�งต์�งอื่ยุ�างต์�อื่ไปน*.–Enter O horizontal axis: 1–Enter O vertical axis: 0
• ถ�าต์"าแหน�งด�งกลั�าวม* O หร อื่ X ไว�แลั�ว ให�วนซ้ำ".าจนกว�าผ่/�ใช�จะกรอื่กค่�าถ/ก
O
O
X
XO
q2.c#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};int i, 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);
}
void print_tbl(int tbl[3][3]) {int i, 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");}
}
ส่�วนต์รวจส่อื่บการแพ�ชนะ
• ต์�วอื่ยุ�างการแพ�ชนะO
O
X
X
O
O
X X
O
X
ส่�วนต์รวจส่อื่บการแพ�ชนะ (Cont.)
• แนวนอื่น• แนวต์�.ง• แนวที่ะแยุงมม
ส่�วนต์รวจส่อื่บการแพ�ชนะ (Cont.)
• Q3: จงเขี*ยุนโปรแกรมที่*�ม*รายุลัะเอื่*ยุดด�งต์�อื่ไปน*.–ประกาศต์�วแปรอื่าเรยุ�ขีนาดส่อื่งม�ต์�ขีนาด 3x3–ก"าหนดให�ค่�าเร��มต์�นขีอื่งต์�วแปรด�งกลั�าวค่ อื่ 0– ให�เขี*ยุนฟั1งก�ช�นต์รวจส่อื่บการแพ�ชนะในแนวนอื่นที่*�
แถวที่*� 0• ส่�งค่�า 0 กลั�บหากไม�ม*การแพ�ชนะ• ส่�งค่�า 1 กลั�บหาก o ชนะ• ส่�งค่�า 2 กลั�บหาก x ชนะ
– ให�ส่มมต์�ค่�าเพ �อื่ที่ดส่อื่บฟั1งก�ช�นด�งกลั�าวในโค่5ด
q3.c // ส่�วนไหนยุ�งไม�ใช� ส่ามารถ comment ไว�ก�อื่นได�#include<stdio.h>void print_tbl(int [3][3]);int check_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");}
int check_winning(int tbl[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;
elsereturn 0;
}
ส่�วนส่ลั�บก�นเลั�น
• ส่ร�างต์�วแปรส่"าหร�บเก%บผ่/�เลั�นป1จจบ�น–0 ส่"าหร�บผ่/�เลั�น o–1 ส่"าหร�บผ่/�เลั�น x
• ส่ลั�บก�นโดยุใช�การประมวลัผ่ลัน�พจน�ที่างต์รรกศาส่ต์ร�– !0 -> 1– !1 -> 0
ส่�วนส่ลั�บก�นเลั�น (Cont.)
• Q4:จงแก�ไขีโปรแกรมจาก Q2 แลัะ Q3 เพ �อื่ให�ผ่/�ใช�ส่ามารถเลั�นเกม OX ได�โดยุม*ลั�กษณะต์�อื่ไปน*.– เร��มต์�นด�วยุต์ารางว�าง–ส่ลั�บก�นเลั�นได� โดยุเร��มจาก o ก�อื่น–ส่ามารถป8อื่นต์"าแหน�งการใส่� o หร อื่ x ได� โดยุห�ามใส่�
ที่�บต์"าแหน�งที่*�ม*ค่�า o หร อื่ x หากใส่�ที่�บให�ใส่�ใหม�เร �อื่ยุๆ–ส่ามารถต์รวจส่อื่บการแพ�ชนะในแนวนอื่น แถวที่*� 0
ได�
q4.c#include<stdio.h>
void print_tbl(int [3][3]);
int check_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;
}
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");
}