โปรแกรมประยุกต์

Download Report

Transcript โปรแกรมประยุกต์

โปรแกรมประยุกต์อื่นๆ
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
#include<stdio.h>
void print_tbl(int [3][3]);
void print_tbl(int tbl[3][3]) {
int i, j;
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++) {
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");
}
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
O
X
• ถ้ าตาแหน่งดังกล่าวมี O หรื อ X ไว้ แล้ ว ให้ วนซ ้าจนกว่าผู้ใช้ จะ
กรอกค่าถูก
q2.c
#include<stdio.h>
void print_tbl(int [3][3]);
void print_tbl(int tbl[3][3]) {
int i, j;
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++) {
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");
}
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
O
O
X
O
X
X
O
X
X
ส่วนตรวจสอบการแพ้ ชนะ (Cont.)
• แนวนอน
• แนวตัง้
• แนวทะแยงมุม
ส่วนตรวจสอบการแพ้ ชนะ (Cont.)
• Q3: จงเขียนโปรแกรมที่มีรายละเอียดดังต่อไปนี ้
– ประกาศตัวแปรอาเรย์ขนาดสองมิตขิ นาด 3x3
– กาหนดให้ คา่ เริ่มต้ นของตัวแปรดังกล่าวคือ 0
– ให้ เขียนฟั งก์ชนั ตรวจสอบการแพ้ ชนะในแนวนอนที่แถวที่ 0
• ส่งค่า 0 กลับหากไม่มีการแพ้ ชนะ
• ส่งค่า 1 กลับหาก o ชนะ
• ส่งค่า 2 กลับหาก x ชนะ
– ให้ สมมุติคา่ เพื่อทดสอบฟั งก์ชนั ดังกล่าวในโค๊ ด
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;
else
return 0;
}
ส่วนสลับกันเล่น
• สร้ างตัวแปรสาหรับเก็บผู้เล่นปั จจุบนั
– 0 สาหรับผู้เล่น o
– 1 สาหรับผู้เล่น x
• สลับกันโดยใช้ การประมวลผลนิพจน์ทางตรรกศาสตร์
– !0 -> 1
– !1 -> 0
ส่วนสลับกันเล่น (Cont.)
• Q4:จงแก้ ไขโปรแกรมจาก Q2 และ Q3 เพื่อให้ ผ้ ใู ช้ สามารถเล่น
เกม OX ได้ โดยมีลกั ษณะต่อไปนี ้
– เริ่มต้ นด้ วยตารางว่าง
– สลับกันเล่นได้ โดยเริ่มจาก o ก่อน
– สามารถป้อนตาแหน่งการใส่ o หรื อ x ได้ โดยห้ ามใส่ทบั ตาแหน่งที่มี
ค่า o หรื อ x หากใส่ทบั ให้ ใส่ใหม่เรื่ อยๆ
– สามารถตรวจสอบการแพ้ ชนะในแนวนอน แถวที่ 0 ได้
q4.c
#include<stdio.h>
void print_tbl(int [3][3]);
int check_winning(int [3][3]);
winner = check_winning(table);
player=!player;
printf("\n");
print_tbl(table);
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;
}
}
if (winner==1)
printf("O win!\n");
else if (winner==2)
printf("X win!\n");
}