עבור לתוכן

בקשת עזרה בתכנות ב++C , משחק שולה המוקשים. (עדכון בעמוד 4)

Featured Replies

פורסם

אני בחרתי לעשות פרוייקט על המשחק "שולה המוקשים"

*עדכון אחרון בעמוד 3.

תודה מראש לעוזרים  :)

  • תגובות 44
  • צפיות 10.6k
  • נוצר
  • תגובה אחרונה
פורסם

אתה יכול לעשות 2 לולאות מכוננות מ-0 עד 20.

בכל לולאה לצייר מלבן במידות i*15, j*15, (i+1)*15-1, (j+1)*15-1.

(לקואורדינטות האלה תצטרך כמובן להוסיף את top או left כדי שיתחילו מהמקום שאתה רוצה)

פורסם
  • מחבר

תודה.

לפחות אני רואה ריבועים , אבל לא במקומות הנכונים.

אשמח אם מישהו יוכל לתקן לי את התוכנית :silly::hi:


#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
void main()
{
int gdriver = DETECT, gmode, errorcode;
int left,top,right,bottom;
int i,j;
int lft=150,tp=150,rtl=-135,btm=-135;

initgraph(&gdriver, &gmode, "C:\\BORLANDC\\BGI");

errorcode = graphresult();
if (errorcode != grOk)
{
printf("Graphics error: %s\n", grapherrormsg(errorcode));
printf("Press any key to halt:");
getch();
exit(1);
}

left = getmaxx() / 2 - 150;
top = getmaxy() / 2 - 150;
right = getmaxx() / 2 + 150;
bottom = getmaxy() / 2 + 150;

rectangle(left,top,right,bottom);

for(i=0; i<20; i++)
{
lft=(i+1)*15-1;
tp=(i+1)*15-1;
lft = getmaxx() / 2 - lft;
tp = getmaxy() / 2 - 150;
rtl = getmaxx() / 2 + -rtl;
btm = getmaxy() / 2 + -135;
rectangle(lft,tp,rtl,btm);

for(j=0; j<20; j++)
{
tp=(j+1)*15-1;
btm=(j+1)*15-1;
lft = getmaxx() / 2 - 150;
tp = getmaxy() / 2 - tp;
rtl = getmaxx() / 2 + -135;
btm = getmaxy() / 2 + -btm;
rectangle(lft,tp,rtl,btm);
}
}

getch();
closegraph();
}

פורסם

למה כל החישובים האלה בתוך הלולאה עם maxx ו- maxy? זה מיותר לגמרי.

לקואורדינטות שאמרתי קודם, כל מה שאתה צריך להוסיף זה את left (לערכים האופקיים) ואת top (לערכים האנכיים)

פורסם
  • מחבר

עכשיו אני רואה נקודות שהיו צריכים להיות ריבועים. :-\


#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
void main()
{
int gdriver = DETECT, gmode, errorcode;
int left,top,right,bottom;
int i,j;
int lft=150,tp=150,rtl=-150,btm=-150;

initgraph(&gdriver, &gmode, "C:\\BORLANDC\\BGI");

errorcode = graphresult();
if (errorcode != grOk)
{
printf("Graphics error: %s\n", grapherrormsg(errorcode));
printf("Press any key to halt:");
getch();
exit(1);
}

left = getmaxx() / 2 - 150;
top = getmaxy() / 2 - 150;
right = getmaxx() / 2 + 149;
bottom = getmaxy() / 2 + 149;
rectangle(left,top,right,bottom);

for(i=0; i<20; i++)
{

lft=(i+1)*15-1+left;
rtl=(i+1)*15-1+left;
tp=(j+1)*15-1+top;
btm=(j+1)*15-1+top;

rectangle(lft,tp,rtl,btm);

for(j=0; j<19; j++)
{

tp=(j+1)*15-1+top;
btm=(j+1)*15-1+top;
lft=(i+1)*15-1+left;
rtl=(i+1)*15-1+left;

rectangle(lft,tp,rtl,btm);

}
}

getch();
closegraph();
}

פורסם

אתה בטוח שאתה מסתכל על הקוד כשאתה כותב אותו?

נתת ערכים זהים לקואורדינטות האופקיות והאנכיות.

פורסם
  • מחבר

היסתדרתי בדרך פשוטה אחרת :)


for(j=0; j<21; j++)
{
tp=top+15;
btm+=15;
rtl=right;
for(i=0; i<21; i++)
{
lft=right-15;
rectangle(lft,tp,rtl,btm);
rtl-=15;
}
}

זה עובד!

פורסם

תנסה את זה..



for(tp=0; tp<15*21; tp+=15)
{
for(lp=0; lp<15*21; lp+=15)
{
rectangle(lp,tp,lp+15,tp+15);
}

}

פורסם
  • מחבר

תודה

שמתי לב שהדרך שלך עובדת טיפה יותר מהר (אני מעדיף אותה), אבל איך אני ממרכז את הממשק בדרך שלך? (בשלי הצלחתי)


#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <dos.h>
void main()
{
   int gdriver = DETECT, gmode, errorcode;
   int left,top,right,bottom;
   int i,j,k,size;
   int lft,tp=59,rtl=468,btm=74;

   initgraph(&gdriver, &gmode, "C:\\BORLANDC\\BGI");

   errorcode = graphresult();
   if (errorcode != grOk)
   {
      printf("Graphics error: %s\n", grapherrormsg(errorcode));
      printf("Press any key to halt:");
      getch();
      exit(1);
   }
   //getmaxx() == 639
   //getmaxy() == 479
   left = getmaxx() / 2 - 150;
   top = getmaxy() / 2 - 150;
   right = getmaxx() / 2 + 150;
   bottom = getmaxy() / 2 + 150;
/*
   left=169;
   top=89;
   right=468;
   bottom=388; */

printf("What the size you want? :");
scanf("%d",&size);
//clrscr();

for(tp=getmaxy() / 2; tp<15*size; tp+=15)
{
for(lft=getmaxx() / 2; lft<15*size; lft+=15)
{
rectangle(lft,tp,lft+15,tp+15);
       }

   }
   getch();
   closegraph();
}

פורסם

לא עדיף כבר למתוח קווים מצד אחד של הלוח לצד השני(יצירת רשת)??

פורסם
  • מחבר

המורה שלי אמרה שעדיף עם ריבועים ולא "רשת" בטענה שככה יהיה אפשר לצבוע אותם כשאני מפנה שטחים כשאני משחק (פוגע במוקש או לא פוגע)

תאמין לי בקושי מישהו מבין אותה בגלל זה בחרתי בשיטת הריבועים :-X

פורסם

לא הבנתי למה זה יותר פשוט עם ריבועים אבל שיהיה

אגב תנסה לחפש פרוייקטים של אנשים אחרים

הנה משהו שמצאתי שמישהו עושה שולה מוקשים ב-C++

http://www.programmersheaven.com/zone8/cat121/27733.htm

יש שם גם את הקוד מקור

פורסם
  • מחבר

גם אני לא הבנתי למה זה פשוט יותר עם ריבועים :s07:

תודה רבה על הלינק, אני בטוח שהוא יעזור לי בעת הצורך. :)

אני בספק אם המורה שלי יודעת לעשות משהו בעצמה ב++C ..

פורסם

אם אתה רוצה לצבוע אותם בצבעים שונים, זה יותר קל. אם אני לא טועה יש פונ שנקראת BAR שמציירת גם עפ צבע בפנים. בכל מקרה, אם אתה רוצה למרכז, אחרי שאתה מחלק את גודל המסך שלך ל-2 אתה צריך להוריד ממנו_ממכרז המסך) את הרוחב המקסימלי של כל המלבנים ביחד חלקי 2. אני מציע לך לצייר את זה על דף נייר לבן ולראות מה אתה צריך לעשות זה עוזר נורא..

פורסם
  • מחבר

OK , הצלחתי למרכז את הממשק.


   width_center = (getmaxx() / 2) - ((cubes*size)/2);
   hight_center = (getmaxy() / 2) - ((cubes*size)/2);

for(tp=hight_center; tp<cubes*size+hight_center; tp+=cubes)
   {
   for(lft=width_center; lft<cubes*size+width_center; lft+=cubes)
       {
       rectangle(lft,tp,lft+cubes,tp+cubes);
       }

   }

תודה על כל העזרה , אני אעדכן אם אני אתקשה בעוד משהו.

עדכון : הצלחתי למלא את הריבועים עם הפונקציה BAR (עכשיו כשאני חושב על זה, גם עם קווים לא הייתה בעייה למלא אותם) , אך לא הבנתי איך לצבוע את הריבועים שהיא יוצרת בצבע אחר (הצבע של הריבועים בברירת מחדל לבן).

ארכיון

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

דיונים חדשים