Используйте Series.isin
с ~
для фильтрации значений, отсутствующих в df1[0]
- в первом столбце с DataFrame.loc
и boolean indexing
[118 ]:
import pandas as pd
#create DataFrame from first file
df1 = pd.read_csv(file1, sep=";", header=None)
print (df1)
0 1 2
0 x1 10.0 a1
1 x2 10.0 a2
2 x3 11.0 a1
3 x4 10.5 a2
4 x5 10.0 a3
5 x6 12.0 a3
#create DataFrame from second file
df2 = pd.read_csv(file2, header=None, sep='|')
print (df2)
0
0 x1
1 x4
2 x5
s = df1.loc[~df1[0].isin(df2[0]), 0]
print (s)
1 x2
2 x3
5 x6
Name: 0, dtype: object
#write to file
s.to_csv('new.csv', index=False, header=False)
Я постарался бы не распараллеливать для игровой логики как поточная обработка J2ME, в зависимости от производителя, конечно, не делает отличной работы по совместному использованию ограниченных ресурсов. Вы будете часто видеть паузы, в то время как поток делает тяжелую обработку. Я только рекомендовал бы потоки для загрузки или функций сетевого соединения как в этом случае, Вы будете просто давать пользователю основную "Загрузку..." обратная связь.
Для обработки этого у меня не было бы подциклов для обновления каждого AI в одном кадре. Я сделал бы что-то как следующее в функции выполнения:
public void run() {
while(true) {
// Update the Game
if(gameManager.isUsersTurn()) {
// Collect User Input
// Process User Input
// Update User's State
}
else {
// Update the active NPC based on their current state
gameManager.updateCurrentNPC();
}
// Do your drawing
}
}
Вы не хотите обновлять все в одном кадре как 1), обновление могло бы быть медленным, не приводя ни к какой непосредственной визуальной обратной связи для пользователя 2) Вы не можете анимировать каждый отдельный NPC, поскольку они делают свое действие. С этой установкой у Вас могли быть состояния NPC, NPC_DECIDE_MOVE и NPC_ANIMATING, который позволит Вам дальнейшее управление того, что делает NPC. NPC_ANIMATING в основном поместил бы игру в состояние ожидания для анимации для происхождения, избежав дальше обрабатывающий, пока анимация не завершена. Затем это могло идти дальше к очереди следующего NPC.
Кроме того, у меня просто был бы gameManager.update (), и gameManager.paint (g) (краску назовут от краски), который обработал бы все и сохранил бы метод выполнения тонким.
Наконец, Вы изучали flushGraphics ()? С GameCanvas Вы обычно создаете Графический объект, тянете все к этому и затем называете flushGraphics (), затем ожидаете. Метод, который Вы упоминаете, является способом заняться им для класса Холста. Просто мысль я упомянул бы это и отправил бы ссылку: Игровые Основы Холста
Хотя не j2me конкретно необходимо получить ввод данных пользователем, общая стратегия состоит в том, чтобы поставить вход в очередь он до его времени для обработки входа.
input ---> queue <---> Manager(loop)
Таким образом, можно даже написать сценарий входа в целях отладки.
Таким образом, Вам не нужен новый поток. Каждый раз, когда пользователь нажимает клавишу, Вы храните их в буфере и затем обрабатываете содержание буфера при необходимости. Если буфер плеера не имеет никакого входа, менеджер должен пропустить весь геймплей, сделать анимации и затем запуститься по (так как игра не является экшн-игрой).