ברוכים הבאים לאתר תחרויות קודגורו! › פורומים › אקסטרים › החלטתי לא להשתתף בתחרות, אבל הינה הרעיונות שלי
- This topic has 2 תגובות, 3 משתתפים, and was last updated לפני 19 שנים, 9 חודשים by Eat Bit not Meat.
-
מאתתגובות
-
13 בפברואר 2005 בשעה 11:17 #77681אורמשתתף
לאחר הרבה זמן שאני ניסיתי וניסיתי לחשוב על שורדים טובים הגעתי למסקנה שאין לי מספיק ידע באסמבלי בשביל התחרות.
בנוסף גם הקבוצה שניסיתי לארגן לא רצתה ללמוד או לא הבינה את שפת האסמבלי בשביל התחרות.
למרות שאני לא אלך לתחרות, היה לי ממש כיך ללמוד כך אסמבלי, ואולי שנה הבאה אם מספיק ידע ואולי עם קבוצה באותה רמה אני אנסה שוב.בכל אופן היו לי כל מני רעיונות שאולי יעזרו(גם אם הם כרגע לא ממש טובים) לאחרים למרות שכבר מאוחר מדי לתקן שורדים אבל אולי זה יעזור כהכנה לתחרות.
-רעיון נחמד שחשבתי עליו למרות שאין בו הרבה תועלת הוא להשתמש במיקום של השורד על ההלוח כדרך להגרלת מספר ראנדומלי, וכך ניתן קצת להכניס מזל לתחרות.
אם למשל בשורדים פשוטים שמפציצים את הלוח כל פעם תוסיפו את ax אז כל משחק חדש המרווח של הקפיצות ישתנה בהתאם למיקום.-רעיון נוסף הוא שבמקום לכתוב רק לכיוון אחד של השורד, אפשר לכתוב לשתי הכיוונים (אחורה וקדימה).
דוגמא:
@loop:
mov w[bx],0cdcdh
mov w[si],0cdcdh
sub bx,9
add si,9
jmp @loop-רעיון נוסף הוא שעדיף לכתוב פקודה לא חוקית ששונה מהפקודה שנמצאת על רוב הלוח int 3 ….
כך אם יש שורד מסוג שורד הוא ינסה לפגוע במקומות ריקים.-רעיון קטן שיכול להיות שימושי תחת מצבים מסויימים הוא לאכסן חלק מקוד התוכנית באוגרים.
דוגמא פשוטה היא להשתמש בפקודה STOSB במקום ב כדי MOVSB כדי לצור שורד שמשכפל את עצמו:
@start:
mov di,ax
add di,(@end-@start)
mov ax,0aah
stosb
@end:-שורד שסורק אחר שורדים אחרים ואז מפציץ במרוכז:
@init:
mov bx,ax
add bx,1075
@core:
@scan:
add bx,11
cmp b[bx],0cch
je @scan
@check:
and bx,65535
cmp bx,ax
jb @kill
add ax,60
cmp bx,ax
sub ax,60
jbe @core
@kill:
sub bx,9
mov cx,15
@destroy:
mov b[bx],0cch
add bx,2
loop @destroy
add bx,1000
jmp @core
@end:בשורד יש גם בדיקה שהוא לא מפציץ את עצמו.
-עוד רעיון שניראה לי שקשה למימוש היא לחשוב על דרכים כלליות איך להתגונן מהתקפות אשר ניתן להוסיף אותן לכל שורד.
לדוגמא הצלחתי למצוא דרך להתגונן מפני התקפה של שורד שמעתיק את עצמו כל פעם צעד אחד ע"י הפקודה stosw או movsw.
אפשר להכין מלכודת לשורד כזה ע"י כך שמכוונים את di למקום בו השורד הותקף.
כך שתור אחד אחרי שהשורד הותקף השורד התוקף יבצע פקודה לא חוקית ויפסיד.
הבעיה עם הרעיון שלא הצלחתי לחשוב על דרך טובה ליישם אותו בצורה כללית ורק בתור שורד נפרד.
@start:
mov di,ax
add di,(@loop-@start)
mov si,di
add si,(@end-@start)
@loop:
jmp @loop
@end:
גם הרעיון הזה לא גמור כי תור לאחר שהשורד שמשכפל את עצמו נפסל השורד המגן נפסל.מי שהרעיון האלה עזרו לו שיהנה… למרות שאני בספק כי כולם מאוד פשוטים.
13 בפברואר 2005 בשעה 12:15 #80041BORNמשתתףכותרת: יפה!
בסיסיים אך יעילים!הצוות שלי גם חשב על כל השאר עד שהגענו לתוצאה האחרונה!
בינהם המון תוכניות שונות שאני עדיין לא אפרט,
אבל בעקרון היית בכיוון לדעתי, אך לא מספיק.לילה טוב.
13 בפברואר 2005 בשעה 17:32 #80048Eat Bit not Meatמשתתףכותרת: רעיונות מצויינים
כמה מהם דומים מאד לאלה שהצגתי ומכיוון שלא קראתי קודם את הודעתך לא נתתי לך את הקרדיט המגיע לך על כך.כמה הערות ותוספות:
הגרלת מספר רנדומלי – רעיון מצויין
כתיבה לשני הכיוונים – ראה גם בטיפ היומי 5, שורד JAWS עושה דבר דומה, בדרך יעילה יותר מבחינת קצב התקפה ופרופיל פגיעות, אבל ללא דילוגים.
מה לכתוב – מצד אחד כתיבה של תוכן השונה מ CC יכול לבלבל ולהעסיק לשווא שורדים מסוג HUNTER (הטיפ היומי 3). אני מעריך שלזה התכוונת ב "שורד מסוג שורד". צד שני, כתיבה של תוכן שונה יכולה להקל על שורד מהסוג המוצע בסוף הטיפ היומי 5, ולהוריד את הצורך בשלב א´.
שני השורדים הללו לא מאד יעילים כנגד שורד כללי ולכן בסופו של דבר זה כנראה לא מאד משנה. החלופה שכן יכולה לשנות היא חלופה אשר משעבדת את השורד הנלכד וגורמת לו לבצע קוד שישרת את מטרותינו.השורד שמשכפל את עצמו – זה זהה למעשה לשורד שכיניתי TIER ומכיוון שהעלית אותו ראשון מגיע לך כל הקרדיט עליו. אכן חכם הדבר להשתמש ב STOSW/B ולא ב MOVSW/B מכיוון שכך הפגיעות יורדת מכיוון שהקוד מועתק מרגיסטרים מוגנים. ניתן להגן באופן דומהעל קוד ארוך יותר, על ידי שימו שבמחסנית, כמו שמוצע בטיפ היומי 5.
הערה נוספת ששכחתי לציין בטיפ היומי 4. ניתן עקרונית לכתוב בכל פעם מילה, עם STOSW וכך להתקדם מהר יותר בכתיבות, אבל התוכנית תמשיך להתקדם בית אחד בכל פעם. לכן יווצר פער גדל והולך בין הבתים שנכתבו לבתים המורצים ופרופיל הפגיעות יגדל בהתאם. ב JAWS יש פתרון שכותב בכל פעם 2 בתים עם STOSW, שמתוכן רק בית אחד הוא פקודת STOSW נוספת להמשך שכפול הקוד והשנייה מנוצלת לכתיבה למקום שונה בזכרון (כיצד?)שורד שסורק אחר שורדים אחרים – דומה ל HUNTER מהטיחפ היומי 3, אולי אפילו יעיל יותר ושוב מגיע לך על כך הקרדיט.
בסך הכל רעיונות מצויינים. דווקא השורדים ה"פשוטים" יכולים להיות החזקים יותר מכיוון שעל ידי לולאה קצרה מקבלים פרופיל פגיעות נמוך וקצב התקפה גבוה.
================================
Eat Bit not Meat
מוגש בחסות "אכלו ביטים ולא חיות"
אתר מומלץ יומי: http://www.animal.org.il -
מאתתגובות
- יש להתחבר למערכת על מנת להגיב.