משחק איקס עיגול באסמבלר ובשפת C - עמוד 2 - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

משחק איקס עיגול באסמבלר ובשפת C


ניר.

Recommended Posts

אתה קצת חצוף.

הבן אדם בעבודה ואתה רוצה שהוא יעשה לך את השיעורי בית עוד היום.

ללאאאאא ביקשתי ממנו שהוא יעשה

אני ביקשתי ממנו עזרה משום שהוא אמר שהוא מבין בזה והוא גם אמר שהוא לא יכול לפתוח את הקבצים האלה בעבודה שלו לכן ביקשתי ממנו אם כשהוא יסיים הוא יוכל לפתוח אותם ולעזור לי למצוא ולפתור את הבעיה...

נ.ב אם אתה לא מבין בנושא אל תוסיף סתםםם הודעות לא קשורות לנושא...

קישור לתוכן
שתף באתרים אחרים

  • תגובות 40
  • נוצר
  • תגובה אחרונה

למי שלא יכול להוריד את הקבצים ולפתוח אותם אז הינה הקודים:

הקוד באסמבלר:


sseg segment stack
dw 20h dup(?)
sseg ends

dseg segment
msg1 db "enter a number between 3-6 : $"
msg2 db "please enter a number between 3-6 : $"
dseg ends

cseg segment
assume cs:cseg,ds:dseg,ss:sseg

include conio.h

begin: mov ax,dseg
mov ds,ax
call clrscrn
push offset msg1
call PutS
call GetCh
cmp al,33h
jc ask
cmp al,37h
jc befor

ask: call clrscrn
push offset msg2
call PutS
call GetCh
cmp al,33h
jc ask
cmp al,37h
jc befor
jmp ask

befor: call clrscrn
and al,0fh
mov dl,al
mov bl,al

print: cmp al,0h
jz newl
push "*"
call PutCh
push 179d
call PutCh
prind: dec al
jmp print

draw: cmp al,0h
jz prind
call NewLine
push 196d
call PutCh
mov ah,dl
draw2: push 197d
call PutCh
push 196d
call PutCh
dec ah
cmp ah,0h
jnz draw2
call NewLine
jmp print

newl: dec bl
mov al,dl
call NewLine
cmp bl,0h
jz endy
jmp draw
endy: int 3h

cseg ends
end begin

הקוד בשפת C:


#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
#define nl 30
int n=3;

void ipus(char b[n][n]) // איפוס הלוח
{
int i,j;

for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
//45 is '-'
b[i][j] =45;
}
}
}

int isempty(int x,int y,char b[][]) //בדיקה האם המקום פנוי
{
//45 IS '-'
if(b[x][y]!= 45)
return 0;
return 1;
}

void fill(int x,int y,char c,char b[][]) //הצבת הערך במקום הנבחר
{
b[x][y] = c;
cout<<endl;
}

void comp_pos(int *x,int *y,char b[][]) //השוואת מקום
{
randomize();
int n1,n2;
do
{
n1 = random(n);
n2 = random(n);
}
while(b[n1][n2]!=45);

*x = n1;
*y = n2;
}

void showboard(char b[][],int type,char name1[nl],char name2[nl]) // הצגת טבלת המשחק
{
clrscr();
int i,j;

cout<<" ";
for(i=0;i<n;i++)
cout<<i<<" ";
cout<<endl;

for(i=0;i<n;i++)
{
cout<<i;
for(j=0;j<n;j++)
{
cout<<"["<<b[i][j]<<"]";
}
cout<<"\n";
}
cout<<"\nX - "<<name1;

if(type==1)
cout<<"\nO - "<<name2<<endl;
else
cout<<"\nO - computer\n";
}

int alachsonim(char b[][],char c) //בדיקת אלכסונים
{
int i,j,m=1;

/*alachson rashi*/
for(i=0;i<n;i++)
{
if(b[i][i]!=c)
m = 0;
}

/*mishni*/
if(!m)
{
m =1;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(i+j==n-1)
{

if(b[i][j]!=c)
m=0;
}
}
}
}

return m;
}

int rows(char b[][],char c) //בדיקת שורות
{
int i,j,m=0;

for(i=0;i<3;i++)
{
for(j=0;j<n;j++)
{
if(b[i][j]==c)
m++;
}
if(m!=n)
m=0;
else
return 1;
}

return 0;
}

int cols(char b[][],char c) //בדיקת עמודות
{
int i,j,m=0;

for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(b[j][i]==c)
m++;
}

if(m!=n)
m=0;
else
return 1;

}

return 0;
}

int isnotfull(char b[][]) //בדיקת מקום במערך
{
int i,j;

for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(b[i][j]==45)
return 1;
}
}

return 0;
}

int wincheck(char b[][],int c) //בדיקת ניצחון
{
if(alachsonim(b,c) || rows(b,c) || cols(b,c))
return 1;
else
return 0;

}

void startgame(int *type,char name1[nl],char name2[nl]) // איפוס המשחק
{
cout<<"\nEnter type of game(1=p vs p;2 = p vs comp): ";
cin>>*type;


cout<<"Player 1(X), enter your name :";
cin>>name1;

if(*type==1)
{
cout<<"Player 2(O), enter your name :";
cin>>name2;
}

}

void declarewinner(char b[][],char c,char name1[nl],char name2[nl],int type) //הכרזה על המנצח
{

if(alachsonim(b,c))
cout<<"\n[oblique] ";
else if(rows(b,c))
cout<<"\n[rows] ";
else
cout<<"[columns] ";

cout<<"THE WINNER IS :";

if(c=='X')
cout<<name1;
else
{
if(type==1)
cout<<name2;
else
cout<<"computer";
}
}

void switchplayer(int m,int e,char *c) // החלפת השחקן
{
if(!m && e)
{
if(*c=='X')
*c = 'O';
else
*c = 'X';
}
}

void main() // תחילת התוכנית
{
char b[n][n];
char c='X',i;
char name1[nl],name2[nl];
int x,y,m=0,e=1,win=0;
int isfull;
int type;

cout<<"enter a size between 3-6 : ";
cin>>n;
while (n<3&&n>6)
{
cout<<"enter a size between 3-6 : ";
cin>>n;
}
clrscr();
startgame(&type,name1,name2);
ipus(b);
showboard(b,type,name1,name2);

while(isnotfull(b) && win==0)
{
cout<<"\nnow playing : ";

if(c=='X')
cout<<name1;
else
{
if(type==1)
cout<<name2;
else
cout<<"computer";
}

if(type==1 || (type==2 && c=='X'))
{
cout<<"\nenter position :";
cin>>x>>y;
}
else
comp_pos(&x,&y,b);

if(isempty(x,y,b))
{
fill(x,y,c,b);
showboard(b,type,name1,name2);

if(wincheck(b,c))
{
win = 1;
m=1;
}
e=1;

}
else
{
cout<<"\nTHIS SQUARE IS NOT AVAILABLE!\n\a";
e = 0;
}

switchplayer(m,e,&c);
}

if(win==0) //סיום המשחק
cout<<"\nthat's a draw!";
else
declarewinner(b,c,name1,name2,type);
}

קישור לתוכן
שתף באתרים אחרים

טוב לגבי הקוד בC

יש לא מעט שיכולים לעזור לך אני מניח, וגם דוגמאות ברשת

אני צריך ממש להסתכל עמוק לתוך זה כדי להבין, כרגע בעבודה לצערי אז לא יכול.

אני אשמח כאשר תתפנה לעזור לי בזה...[br]פורסם בתאריך: 13.08.2008 בשעה 21:33:44


מה הבעיה שיש לך בקוד C ?

הוא עושה לי בעיה עם המערכים ובבדיקות של "האם המקום פנוי" ...

שאלה : כיצד אני השהייה (DELAY) ב-C?

קישור לתוכן
שתף באתרים אחרים

לא הבנתי כמה דברים בקוד הC שלך

נראה קצת מבולגן

הייתי עושה פחות פונקציות ובלאגן

סה"כ אתה יכול לעשות משהו פשוט יותר

תן לשחקן הראשון את הערך 10

לשני את הערך -10 (סתם זורק)

וכל פעם תסכום את השורות, אם מוצא שורה שהסכום הוא 30 או -30 הרי שיש מנצח

וכנל לגבי עמודות ואלכסונים.

משבצת היא ריקה אם הערך בה שונה מ10 או -10

ולא יודע

נראה לי די פשוט

קשה לעזור ככה באויר, אבל באמת שלא רואה משהו יותר מידי מסובך.

דבר נוסף

הפונקציה comp_pos

למה היא נראית זוועה כזאתי?!

הבנתי שהמחשב טמבל אצלך

אבל, אתה לא רק רוצה לבדוק ששונה מ45 (ערך הריק אצלך) אלא גם שאתה לא עולה על אף אחד, אחרת יש מצב שמישהו הציב כבר בX Y מסויימים ואתה רושם עליהים שוב.

הבדיקות של אלכסונים וכו' פשוט זוועה.

כולה תעשה מה שאמרתי

תעבור על האלכסון - פשוט שתי לולאות FOR פשוטות וכנל לגבי מאונכים וכו'.

חוץ מזה, שאתה מת על פניות לזכרון, למה ?!

למה בכלל שיש לך INT לעשות רע כזה?!

אני אומר ככה

תמחוק

תתחיל מהתחלה

תעשה הכל פשוט וקל, לדעתי בשעות ספורות אתה גומר את זה

אל תרשום ואז תחשוב

תחשוב ואז תרשום!!

זה הכל.

קישור לתוכן
שתף באתרים אחרים

לא הבנתי כמה דברים בקוד הC שלך

נראה קצת מבולגן

הייתי עושה פחות פונקציות ובלאגן

סה"כ אתה יכול לעשות משהו פשוט יותר

תן לשחקן הראשון את הערך 10

לשני את הערך -10 (סתם זורק)

וכל פעם תסכום את השורות, אם מוצא שורה שהסכום הוא 30 או -30 הרי שיש מנצח

וכנל לגבי עמודות ואלכסונים.

משבצת היא ריקה אם הערך בה שונה מ10 או -10

ולא יודע

נראה לי די פשוט

קשה לעזור ככה באויר, אבל באמת שלא רואה משהו יותר מידי מסובך.

דבר נוסף

הפונקציה comp_pos

למה היא נראית זוועה כזאתי?!

הבנתי שהמחשב טמבל אצלך

אבל, אתה לא רק רוצה לבדוק ששונה מ45 (ערך הריק אצלך) אלא גם שאתה לא עולה על אף אחד, אחרת יש מצב שמישהו הציב כבר בX Y מסויימים ואתה רושם עליהים שוב.

הבדיקות של אלכסונים וכו' פשוט זוועה.

כולה תעשה מה שאמרתי

תעבור על האלכסון - פשוט שתי לולאות FOR פשוטות וכנל לגבי מאונכים וכו'.

חוץ מזה, שאתה מת על פניות לזכרון, למה ?!

למה בכלל שיש לך INT לעשות רע כזה?!

אני אומר ככה

תמחוק

תתחיל מהתחלה

תעשה הכל פשוט וקל, לדעתי בשעות ספורות אתה גומר את זה

אל תרשום ואז תחשוב

תחשוב ואז תרשום!!

זה הכל.

1.הערך 45 (שבעצם מציין/ מסמן '-') מראה שהמקום פנוי ושניתן להציב בו אחרת הוא לא מציב והוא רושם הודעה שהמקום אינו פנוי זה בעצם מה שעושה הפונקציה comp_pos..

2.יש לי כבר פונקציות שמבצעות את כל הבדיקות כולל אלכסונים ובכך היא בודקת אם יש ניצחון...

3.ב-INT אני משתמש כדי לדעת את גודל הטבלה (טווח של בין 3 ל-6)

4.הקוד ברובו תקין הבעיה העיקרית היא הגישה / העברת מערך לפונקציה .....

קישור לתוכן
שתף באתרים אחרים

מישהו יכככווללל לעזזזווורר ליי (ואם הוא יכול גם להריץ) ולהגיד לי איך אני פותר את הבעיה עם העברת המערכים הדו-מימדיים לפונקציות השונות ?

דדחחחווווףףףףףףףףףףףףףףףףףףף..................

קישור לתוכן
שתף באתרים אחרים

זה תלוי בסביבה, חפש sleep או usleep. וערך CHAR פשוט מציבים או מספר קטן מ 255 או בין 2 גרש.

האם הפקודות SLEEP ו-USLEEP הם מובנים בשפת C ?

איך מזמנים ומשתמשים בערך SLEEP ?

איך מזמנים ומשתמשים בערך USLEEP ?

אני מציב את הערך של ה-CHAR בין 2 גרש ועדיין זה לא עובד לי..אתה יכול בבקשה להסתכל ולבדוק בקובץ (המצורף בהודעתי הקודמת) ולפתור לי את הבעיה ?

קישור לתוכן
שתף באתרים אחרים

תסתכל בקבצי עזרה או שתחפש באינטרנט, אני בטוח שתמצא מספיק מידע באיך משתמשים בזה. לגבי ההצבה של הערך char תכתוב בדיוק איפה הבעיה אם אתה רוצה שיעזרו לך.

הבעיה היא במערך הדו מימדי כאשר אני בודק ומשוואה באמצעות IF את הערך שבתא במערך לערך שאני בוחר (לדוגמא הערך '-' אשר מציין כי התא ריק).

תוכל לראות אתה המקומות אשר הוא מופיע בהם בתוכנית..אתה יודע כיצד אפשר לפתור מאת הבעיה הזאת ?

קישור לתוכן
שתף באתרים אחרים

בפונקציה comp_pos למשל, אתה מקבל מצביעים ל x, y (אני לא יודע למה החלטת לעשות את זה ככה), אבל אתה משתמש בערכי המצביעים במקום הערכים של המשתנים, אז או שתעביר את המשתנים ישירות או שתוסיף * לפוינטרים בשימוש שלהם כדי לגשת לתוכן.

קישור לתוכן
שתף באתרים אחרים

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.


×
  • צור חדש...