ברוכים הבאים לאתר תחרויות קודגורו! › פורומים › אקסטרים › אוטומציה של תהליך הבנייה וההרצה
- This topic has 2 תגובות, 3 משתתפים, and was last updated לפני 9 שנים, 9 חודשים by yoavsr.
-
מאתתגובות
-
11 בפברואר 2015 בשעה 11:43 #83111tomerמשתתף
היי
ברצוני לבנות כמה כלים לאוטומציה של תהליך הבנייה של השורדים והרצתם. אשמח לעזרה והמלצות מבעלי נסיון. יש לכם המלצות?
ושאלה ספציפית: כיצד אפשר להריץ את מנוע המשחק ושהוא יוציא את ה csv רק בצורה שקטה, בלי ה GUI מ cmd או סקריפט? והאם קיימות אפשרויות כמו הרצת רק משחקים בהם נמצא השורד שלי?
תודה רבה!
אם יהיה ביקוש אשמח לשתף את הכלים כשיהיו מוכנים למרות שאני לא מתחייב שהם יהיו במצב סטנדרטי נוח.- הדיון הזה עודכן לפני 9 שנים, 9 חודשים ע״יtomer.
11 בפברואר 2015 בשעה 21:57 #83113Idan Dorמשתתףלגבי הרצה שקטה והרצה רק עם השורד שלך – אני ויואב אחרי קודגורו 9 הכנו לעצמנו דיבאגר חדש שבין השאר יש בו את שתי הדברים האלו. אנחנו מתכננים לשחרר אותו אחרי שנשתתף התחרות הקרובה בנוסף לכלים נוספים שהכנו בשנה האחרונה. אין את האופציות האלו במנוע ואם אתה רוצה אותם אתה תאלץ לכתוב אותם בעזרת הקוד הפתוח של המנוע שנמצא פה:
https://github.com/codeguru-il/corewars8086בהצלחה.
19 בפברואר 2015 בשעה 10:52 #83117yoavsrמשתתףאתה יכול להשתמש בסקריפט הזה בשביל בנייה אוטומטית
https://gist.github.com/yoavst/68e4042aba897604af50package com.yoavst.autocompile; import javax.swing.*; import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; import java.nio.file.StandardCopyOption; import java.util.ArrayList; public class AutoCompile { public static boolean USE_DOSBOX = System.getProperty("sun.arch.data.model").contains("64"); public static void main(String[] args) throws IOException { File[] warriorFiles = new File("work").listFiles(); assert warriorFiles != null; ArrayList<File> files = new ArrayList<File>(warriorFiles.length); for (File file : warriorFiles) { if (getFileExtension(file).equalsIgnoreCase(".asm")) { files.add(file); } } if (files.size() > 0) { // User need to have dosbox in path String currentPath = new File(".").getAbsolutePath(); for (File asm : files) { String name = stripExtension(asm.getName()); // FIXME use USE_DOSBOX Process command = Runtime.getRuntime().exec("dosbox -noconsole " + "-c \"mount g: " + currentPath + "\" " + "-c \"g:\" " + "-c \"copy work\\" + name + ".asm asm\\" + name + ".asm\" " + "-c \"cd asm\" " + "-c \"tasm -zi " + name + ".asm\" " + "-c \"tlink /t " + name + ".obj\" " + "-c \"del " + name + ".obj\" " + "-c \"del " + name + ".map\" " + "-c \"del " + name + ".asm\" " + "-c \"exit\"\n"); try { command.waitFor(); } catch (InterruptedException e) { JOptionPane.showMessageDialog(null, "Error - cant compile asm file " + asm.getName()); System.exit(1); } File compiledFile = new File("asm", name + ".com"); if (!compiledFile.exists()) { JOptionPane.showMessageDialog(null, "Error - cant compile asm file " + asm.getName()); System.exit(1); } else { Files.move(Paths.get(compiledFile.getAbsolutePath()), Paths.get(new File("survivors", name).getAbsolutePath()), StandardCopyOption.REPLACE_EXISTING); } } } } public static String getFileExtension(File file) { String name = file.getName(); int lastIndexOf = name.lastIndexOf("."); if (lastIndexOf == -1) { return ""; // empty extension } return name.substring(lastIndexOf); } public static String stripExtension(String str) { // Handle null case specially. if (str == null) return null; // Get position of last '.'. int pos = str.lastIndexOf("."); // If there wasn't any '.' just return the string as is. if (pos == -1) return str; // Otherwise return the string, up to the dot. return str.substring(0, pos); } }
אתה צריך לקמפל, ולהוסיף את ההרצה של ה-class לbat שפותח את התוכנה.
בעיקרון זה לכל קובץ בתקיית work פותח dosbox ומקמפל אותו באמצעות tasm (אצלי זה פשוט 64 ביט, אז אני חייב DOSBOX).
כדי שזה יעבוד:
צריך תקיית WORK שבא כל קבצי ה-ASM
צריך תקיית ASM שבא TASM של 16ביט נמצא
כמובן שאתה יכול לשנות את הפקודה ולהשתמש במה שאתה רוצה. -
מאתתגובות
- יש להתחבר למערכת על מנת להגיב.